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

目录

一、Leetcode189轮转数组

题目描述

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

题目链接:力扣题目链接

解题思路

  • 切片思想

方法:切片

  • 因为轮转后切片内顺序不变
  • 将区间调转位置-k::-k
  • !!!当k大于数组长度的时候,要取余
python 复制代码
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 表示若干个区间的集合,其中单个区间为 intervalsi = starti, endi 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

题目链接:力扣题目链接

解题思路

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

方法:

  • 先排序
  • 判断加入区间/更新区间的条件
  • 加入区间:
    merge为空,上一个区间的右区间小于下一个区间的左区间1,3,4,5
  • 更新区间:
    上一个区间的右区间大于下一个区间的左区间
    !!!更新右区间=这两个区间右区间的最大值
python 复制代码
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: x0)
  • 多列几个例子就知道合并的逻辑了

三、Leetcode21合并两个有序链表

题目描述

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


题目链接:力扣题目链接

解题思路

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

方法:

  • 新建一个空节点dummy,用merge遍历,最终返回dummy.next
  • 当两个链表节点都存在时,哪个小就连上哪个
  • 当只剩一个链表时,将剩下的链表之间连过来
python 复制代码
# 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 = dummy

        cur1 = list1
        cur2 = list2
        while cur1 and cur2:
            if cur1.val <= cur2.val:
                merge.next = cur1
                cur1 = cur1.next
            else:
                merge.next = cur2
                cur2 = cur2.next
            merge = merge.next

        # 剩余节点直接连过来
        if cur1:
            merge.next = cur1
        else:
            merge.next = cur2

        return dummy.next

总结

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

四、Leetcode2两数相加

题目描述

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

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

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

题目链接:力扣题目链接

解题思路

  • 注意存储进位的值

方法:

  • while循环只要有一个链表没走完就继续走,走完的为0
  • 注意最后如果还有进位,要用merge.next存完!!!
python 复制代码
# 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 = l1
        cur2 = l2

        dummy = ListNode()
        merge = dummy
        pre = 0
        while cur1 or cur2:
            val1 = cur1.val if cur1 else 0
            val2 = cur2.val if cur2 else 0
            total = val1 + val2 + pre
            # 处理进位
            pre = total // 10
            merge.next = ListNode(total % 10)
            merge = merge.next
            # 移动到下一个节点
            if cur1:
                cur1 = cur1.next
            if cur2:
                cur2 = cur2.next

        if 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"


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

相关推荐
To_OC10 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
学测绘的小杨14 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
用户9385156350715 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC16 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥17 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者18 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者18 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月21 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
zzzzzz31021 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐1 天前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python