当前位置: 首页 > article >正文

LeetCode 每日一题 2025/1/27-2025/2/2

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • 1/27 45. 跳跃游戏 II
      • 1/28 119. 杨辉三角 II
      • 1/29 219. 存在重复元素 II
      • 1/30 350. 两个数组的交集 II
      • 1/31 541. 反转字符串 II
      • 2/1 81. 搜索旋转排序数组 II
      • 2/2 598. 区间加法 II


1/27 45. 跳跃游戏 II

题目说明一定可以跳到队末 要次数最少
找到跳到队尾的最靠前的一个点 将队尾移到这个点 跳动次数+1 pos记录当前的地址
反复寻找
begin用来记录重新开始寻找的点
如果开头是1则直接进行跳跃 次数+1 begin+1 及略过开头若干个1

def jump(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    begin = 0
    pos = 0 
    num = 0
    l = len(nums)
    if l<2:
        return num
    
    while True:
        while nums[pos]==1:
            pos+=1
            if pos==l-1:
                break
            num+=1
            begin = pos
        while pos+nums[pos]<l-1:
            pos+=1
        num +=1
        if pos==begin or pos==l-1:
            break
        l = pos+1
        pos = begin
    return num



1/28 119. 杨辉三角 II

按规则生成

def getRow(rowIndex):
    """
    :type rowIndex: int
    :rtype: List[int]
    """
    if rowIndex==0:
        return [1]
    elif rowIndex==1:
        return [1,1]
    pre = [1,1]
    ind = 1
    while ind<rowIndex:
        ind+=1
        cur = [1]
        for i in range(len(pre)-1):
            cur.append(pre[i]+pre[i+1])
        cur.append(1)
        pre=cur[:]
    return cur



1/29 219. 存在重复元素 II

滑动窗口 保持k+1长度 记录长度内出现的数字个数
如果数字个数大于1 则成立

def containsNearbyDuplicate( nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: bool
    """
    from collections import defaultdict
    win = defaultdict(int)
    for i in range(min(len(nums),k+1)):
        win[nums[i]]+=1
        if win[nums[i]]>1:
            return True
    for i in range(k+1,len(nums)):
        win[nums[i-k-1]]-=1
        win[nums[i]]+=1
        if win[nums[i]]>1:
            return True
    return False



1/30 350. 两个数组的交集 II

ans1: 接349 获取不重复的交集l
遍历l中的元素
找到两个集合中该元素出现最少的次数 添加进答案
ans2: 将第一个集合编成 字符-次数 的字典 遍历第二个集合
如果某一个字符在字典中并且次数不为0 则加入 字典中的次数减一

from collections import defaultdict

def intersect(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """
    n1=set(nums1)
    n2=set(nums2)
    l = list(n1&n2)
    res=[]
    for x in l:
        num = min(nums1.count(x),nums2.count(x))
        res.extend([x]*num)
    return res

def intersect2(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """
    d = defaultdict(int)
    res=[]
    for i in nums1:
        d[i]+=1
    for i in nums2:
        if d[i]>0:
            res.append(i)
            d[i]-=1
    return res



1/31 541. 反转字符串 II

l,r代表需要反正的字符段左右
l需要小于s的长度 r为l+k-1和长度n-1之间的较小值
下一个l为之前r+k+1

def reverseStr(s, k):
    """
    :type s: str
    :type k: int
    :rtype: str
    """
    n = len(s)
    ls= list(s)
    l = 0
    while l<n:
        r = min(l+k-1,n-1)
        tmp = r
        while l<r:
            ls[l],ls[r]=ls[r],ls[l]
            l+=1
            r-=1
        l = tmp+k+1
    return ''.join(ls)



2/1 81. 搜索旋转排序数组 II

找到当前旋转的位置 nums[n-1]>=nums[0]
恢复原来顺序 再进行二分查找

def search(nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: bool
    """
    def find(nums):
        l,r = 0,len(nums)-1
        while l<=r:
            mid = l +(r-l)//2
            if nums[mid]==target:
                return True
            elif nums[mid]<target:
                l = mid+1
            else:
                r = mid-1
        return False
    if len(nums)==1:
        return nums[0]==target
    if len(nums)==2:
        return nums[0]==target or nums[1]==target
    
    if nums[0]<nums[-1]:
        return find(nums)
    
    for i in range(1,len(nums)):
        if nums[i]<nums[i-1]:
            return find(nums[i:]+nums[:i])
    return False



2/2 598. 区间加法 II

最大整数即为每次都加到的区间
遍历记录x,y的最小值

def maxCount(m, n, ops):
    """
    :type m: int
    :type n: int
    :type ops: List[List[int]]
    :rtype: int
    """
    curx,cury=m,n
    for x,y in ops:
        curx = min(curx,x)
        cury = min(cury,y)
    return curx*cury




http://www.kler.cn/a/535098.html

相关文章:

  • leetCode刷题-图、回溯相关
  • Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
  • 配置@别名路径,把@/ 解析为 src/
  • 基于LabVIEW的Modbus-RTU设备通信失败问题分析与解决
  • 基序和纯度分数的计算
  • 院校联合以项目驱动联合培养医工计算机AI人才路径探析
  • HOW - 个人创业(准备篇)
  • Vue 鼠标事件合集,关于鼠标右键的处理方法(改写鼠标右键方法、自定义鼠标右键)
  • 【ABB阀门定位器EDP300如何进行自整定】
  • 解决使用python提取word文档中所有的图片时图片丢失的问题
  • MMU工作原理
  • linux的基础入门2
  • 3步打造C# API安全密盾
  • DS目前曲线代替的网站汇总
  • word数学模式公式显示不全
  • 【hudi】基于hive2.1.1的编译hudi-1.0.0源码
  • Hangfire.NET:.NET任务调度
  • ByConity二进制集群版部署
  • 康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
  • DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】
  • ASP.NET Core标识框架Identity
  • Spring Boot框架知识总结(超详细)
  • ORACLE用regexp_sbustr函数截取json值的sql。
  • 蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD
  • 虚拟机搭建---K8S环境
  • GoFrame 微服务脚手架模块 (v2.8.x)