算法练习|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"


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

相关推荐
盘古开天1666几秒前
PPO算法原理详解(下):Clip机制深入剖析与实践指南
人工智能·算法·机器学习
虫无涯5 分钟前
大模型联动 CodeQL + Coverity 完整落地方案
人工智能·python·大模型·llm·codeql·coverity
段一凡-华北理工大学15 分钟前
大模型与智能体在工业的应用~系列文章12:大模型 × 数字孪生 × 智能体的融合图景
大数据·人工智能·python·深度学习·大语言模型·python开发
流形填表20 分钟前
多校区题库标准化:Excel模板与校验脚本
开发语言·python
All for pursuit.21 分钟前
【贪心-4】581.最短无序连续子数组
数据结构·c++·算法·leetcode
weixin_3077791331 分钟前
从“人操作仪器”到“Agent 自主发现”:OPL 金属材料自驱动实验室 MVP 技术论述
开发语言·人工智能·算法·架构
释厄62341 分钟前
01AB 基本元理——任何智能体的三元法理·0=1→0≠1法理跃迁为天理
人工智能·windows·算法·microsoft·机器学习
梦想画家43 分钟前
SQLMesh Python 模型入门(二):依赖管理、引擎实战与内存优化
数据库·python·sqlmesh
Omics Pro1 小时前
经典多组学整合算法→商用云平台
数据库·人工智能·算法·机器学习·自然语言处理
ting94520001 小时前
深度拆解|1752vc Pitch Deck Analyzer 底层技术架构与核心算法原理
人工智能·算法·架构