算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结

本文主要是介绍算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、Leetcode189轮转数组
    • 题目描述
    • 解题思路
    • 方法:切片
    • 总结
  • 二、Leetcode56合并区间
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • 三、Leetcode21合并两个有序链表
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • 四、Leetcode2两数相加
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • sql总结:

一、Leetcode189轮转数组

题目描述

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 切片思想

方法:切片

  • 因为轮转后切片内顺序不变
  • 将区间调转位置[-k:],[:-k]
  • !!!当k大于数组长度的时候,要取余
class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""# 当k大于数组长度时k = k % len(nums)n1 = nums[-k:]n2 = nums[: -k]nums[:] = n1 + n2

总结

  • 切片思想非常好用
  • 轮转的时候注意k的大小
  • 注意语法[ : ] = [ :-k] + [-k: ]


二、Leetcode56合并区间

题目描述

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 合并区间,比较上一个区间的右区间和下一个区间的左区间

方法:

  • 先排序
  • 判断加入区间/更新区间的条件
  • 加入区间:
    merge为空,上一个区间的右区间小于下一个区间的左区间[1,3],[4,5]
  • 更新区间:
    上一个区间的右区间大于下一个区间的左区间
    !!!更新右区间=这两个区间右区间的最大值
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 根据每个区间的左区间进行排序intervals.sort(key = lambda x: x[0])merge = []for i in intervals:if not merge or merge[-1][1] < i[0]:merge.append(i)else:merge[-1][1] = max(merge[-1][1], i[1])return merge

总结

  • 二维数组排序
    s.sort(key = lambda x: x[0])
  • 多列几个例子就知道合并的逻辑了


三、Leetcode21合并两个有序链表

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

在这里插入图片描述
在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 比合并区间简单,链表合并只用比大小
  • 小的加入,剩的加入

方法:

  • 新建一个空节点dummy,用merge遍历,最终返回dummy.next
  • 当两个链表节点都存在时,哪个小就连上哪个
  • 当只剩一个链表时,将剩下的链表之间连过来
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:dummy = ListNode()merge = dummycur1 = list1cur2 = list2while cur1 and cur2:if cur1.val <= cur2.val:merge.next = cur1cur1 = cur1.nextelse:merge.next = cur2cur2 = cur2.nextmerge = merge.next# 剩余节点直接连过来if cur1:merge.next = cur1else:merge.next = cur2return dummy.next

总结

  • 剩余链表可以通过节点之间连过来
    if cur1:
    merge.next = cur1


四、Leetcode2两数相加

题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 注意存储进位的值

方法:

  • while循环只要有一个链表没走完就继续走,走完的为0
  • 注意最后如果还有进位,要用merge.next存完!!!
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:cur1 = l1cur2 = l2dummy = ListNode()merge = dummypre = 0while cur1 or cur2:val1 = cur1.val if cur1 else 0val2 = cur2.val if cur2 else 0total = val1 + val2 + pre# 处理进位pre = total // 10merge.next = ListNode(total % 10)merge = merge.next# 移动到下一个节点if cur1:cur1 = cur1.nextif cur2:cur2 = cur2.nextif pre:merge.next = ListNode(pre)return dummy.next

总结

  • 新建链表都是:
    dummy = ListNode()
    merge = dummy
    用merge.next继续走,最终返回dummy.next

  • 进位值等于pre // 10

  • 注意最终剩下的进位也要用merge.next存!!!



sql总结:

  • sql中 值的比较用=
    where id % 2 = 1

  • 日期范围用between…and…
    activity_date between “2019-06-28” and “2019-07-27”



心得:就算是春招也要坚持刷算法~!!缓解焦虑就刷力扣!!虽然刷的慢,但希望刷过的算法都会用!!!

这篇关于算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922919

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1