LeetCode 每日一题 2024/12/23-2024/12/29

news2025/1/3 16:15:22

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


目录

      • 12/23 1847. 最近的房间
      • 12/24 3291. 形成目标字符串需要的最少字符串数 I
      • 12/25 3292. 形成目标字符串需要的最少字符串数 II
      • 12/26 3083. 字符串及其反转中是否存在同一子字符串
      • 12/27 3159. 查询数组中元素的出现位置
      • 12/28 3046. 分割数组
      • 12/29


12/23 1847. 最近的房间

经房间按大小排序
先考虑minSize大的查询
将比minSize大的房间号放入ids序列中考虑
根据当前查询preferred_id 在ids中查找离他最近的两个id 比较差值大小

def closestRoom(rooms, queries):
    """
    :type rooms: List[List[int]]
    :type queries: List[List[int]]
    :rtype: List[int]
    """
    from sortedcontainers import SortedList
    n=len(rooms)
    rooms.sort(key=lambda x:x[1])
    m=len(queries)
    ans=[-1]*m
    ids=SortedList()
    j=n-1
    for i in sorted(range(m),key=lambda i:-queries[i][1]):
        pid,msize=queries[i]
        while j>=0 and rooms[j][1]>=msize:
            ids.add(rooms[j][0])
            j-=1
        diff=float("inf")
        k = ids.bisect_left(pid)
        if k:
            diff = pid-ids[k-1]
            ans[i]=ids[k-1]
        if k<len(ids) and ids[k]-pid<diff:
            ans[i]=ids[k]
    return ans



12/24 3291. 形成目标字符串需要的最少字符串数 I

对于每个word 与target求出在结束在target[i]的前缀能够匹配的最长前缀back[i]
动态规划 dp[i]表示前i个字母需要最少字符串数

def minValidStrings(words, target):
    """
    :type words: List[str]
    :type target: str
    :rtype: int
    """
    def prefix(word,target):
        s=word+"#"+target
        n=len(s)
        pi=[0]*n
        for i in range(1,n):
            j=pi[i-1]
            while j>0 and s[i]!=s[j]:
                j=pi[j-1]
            if s[i]==s[j]:
                j+=1
            pi[i]=j
        return pi
    n=len(target)
    back = [0]*n
    for w in words:
        pi = prefix(w, target)
        m=len(w)
        for i in range(n):
            back[i]=max(back[i],pi[m+1+i])
    dp=[0]+[10**9]*n
    for i in range(n):
        dp[i+1]=dp[i+1-back[i]]+1
        if dp[i+1]>n:
            return -1
    return dp[n]



12/25 3292. 形成目标字符串需要的最少字符串数 II

对于每个word 与target求出在结束在target[i]的前缀能够匹配的最长前缀back[i]
动态规划 dp[i]表示前i个字母需要最少字符串数

def minValidStrings(words, target):
    """
    :type words: List[str]
    :type target: str
    :rtype: int
    """
    def prefix(word,target):
        s=word+"#"+target
        n=len(s)
        pi=[0]*n
        for i in range(1,n):
            j=pi[i-1]
            while j>0 and s[i]!=s[j]:
                j=pi[j-1]
            if s[i]==s[j]:
                j+=1
            pi[i]=j
        return pi
    n=len(target)
    back = [0]*n
    for w in words:
        pi = prefix(w, target)
        m=len(w)
        for i in range(n):
            back[i]=max(back[i],pi[m+1+i])
    dp=[0]+[10**9]*n
    for i in range(n):
        dp[i+1]=dp[i+1-back[i]]+1
        if dp[i+1]>n:
            return -1
    return dp[n]



12/26 3083. 字符串及其反转中是否存在同一子字符串

map记录所有长度为2的子字符串
如果某个子字符串倒序也在map中 返回true

def isSubstringPresent(s):
    """
    :type s: str
    :rtype: bool
    """
    m={}
    for i in range(len(s)-1):
        m[s[i:i+2]]=1
        if s[i:i+2][::-1] in m:
            return True
    return False



12/27 3159. 查询数组中元素的出现位置

遍历一边nums记录x的位置

def occurrencesOfElement(nums, queries, x):
    """
    :type nums: List[int]
    :type queries: List[int]
    :type x: int
    :rtype: List[int]
    """
    cur=1
    m={}
    for i,v in enumerate(nums):
        if v==x:
            m[cur]=i
            cur+=1
    n=len(queries)
    ans=[-1]*n
    for i,v in enumerate(queries):
        if v in m:
            ans[i]=m[i]
    return ans



12/28 3046. 分割数组

统计每个数的出现次数 如果次数超过2则无法按要求分割

def isPossibleToSplit(nums):
    """
    :type nums: List[int]
    :rtype: bool
    """
    m={}
    for num in nums:
        m[num]=m.get(num,0)+1
        if m[num]>2:
            return False
    return True



12/29





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小白投资理财 - 看懂 PE Ratio 市盈率

小白投资理财 - 看懂 PE Ratio 市盈率 什么是 PE RatioPE 缺陷PE 优点总结 无论是在菜市还是股票市场&#xff0c;每个人都想捡便宜&#xff0c;而买股票就像市场买菜&#xff0c;必须货比三家&#xff0c;投资股票最重要就是要知道回本时间要多久&#xff0c;市场上很多时候散…

python利用selenium实现大麦网抢票

大麦网&#xff08;damai.cn&#xff09;是中国领先的现场娱乐票务平台&#xff0c;涵盖演唱会、音乐会、话剧、歌剧、体育赛事等多种门票销售。由于其平台上经常会有热门演出&#xff0c;抢票成为许多用户关注的焦点。然而&#xff0c;由于票务资源的有限性&#xff0c;以及大…

SQL-leetcode-183. 从不订购的客户

183. 从不订购的客户 Customers 表&#xff1a; -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | -------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都表示客户的 ID 和名称。 Orders 表&#…

充电桩语音提示芯片方案-支持平台自定义语音NV128H让充电更便捷

随着工业化与城市化进程的加速推进&#xff0c;传统燃油汽车的数量急剧攀升&#xff0c;这直接导致了石油资源的过度开采与消耗。石油&#xff0c;作为不可再生的化石燃料&#xff0c;其储量日益枯竭&#xff0c;价格波动频繁&#xff0c;给全球能源安全带来了前所未有的挑战。…

Android 旋转盘导航栏

1.直接上源码&#xff1a; package com.you.arc;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.graphics.RectF; import android.support…

手搓一个ChatUI需要分几步

只关注项目代码的同学可以直接跳转目录中的正文部分&#xff0c;查看项目仓库和功能介绍。 引言 Chatbot的UI界面设计&#xff0c;是和传统软件不同的&#xff1a;都是当面一个简洁的对话框&#xff0c;框里预备着热乎的工具&#xff0c;可以随时更新。 像我这样做工的牛马&a…

低代码开发深度剖析:JNPF 如何引领变革

在当今数字化转型加速的时代&#xff0c;低代码开发已成为众多企业提升效率、降低成本的关键利器。它打破了传统开发模式的高门槛和冗长流程&#xff0c;让应用开发变得更加高效、灵活与普惠。 低代码开发的核心优势 低代码开发平台通过可视化的操作界面&#xff0c;减少了对…

uniapp实现APP、小程序与webview页面间通讯

需求&#xff1a; 1、需要在Uniapp开发的APP或小程序页面嵌入一个H5网页&#xff0c;需要拿到H5给APP传递的数据。 2、并且这个H5是使用vuevant开发的。&#xff08;其实跟使用uniapp开发H5一样&#xff09; 实现步骤&#xff1a; 1、首先需要兼容多端和App端&#xff0c;因…

网络游戏之害

网络游戏之害&#xff1a; 网络游戏于今之世风靡四方&#xff0c;其娱人耳目、畅人心怀之效&#xff0c;固为人知&#xff0c;然所藏之害&#xff0c;若隐伏之暗潮&#xff0c;汹涌而至时&#xff0c;足以覆舟&#xff0c;尤以青年为甚&#xff0c;今且缕析其害&#xff0c;以…

数据库的创建与删除:理论与实践

title: 数据库的创建与删除:理论与实践 date: 2024/12/31 updated: 2024/12/31 author: cmdragon excerpt: 在当今的数字时代,数据的管理和存储变得尤为重要。数据库作为数据存储的结构化方案,为数据的增删改查提供了系统化的方法。在一个典型的数据库管理系统中,创建和…

【电机控制】基于STC8H1K28的六步换向——方波驱动(软件篇)

【电机控制】基于STC8H1K28的六步换向——方波驱动&#xff08;软件篇&#xff09; 文章目录 [TOC](文章目录) 前言一、main.c二、GPIO.c三、PWMA.c四、ADC.c五、CMP.c六、Timer.c七、PMSM.c八、参考资料总结 前言 【电机控制】STC8H无感方波驱动—反电动势过零检测六步换向法 …

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中&#xff0c;租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘&#xff0c;我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此&#xff0c;针对这些需求&#xff0c;完善租赁小程序…

电子电器架构 --- 智能座舱与AI结合

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…

C语言 斐波那契数列(递归算法)

C语言 斐波那契数列&#xff08;递归算法&#xff09; 什么是斐波那契数列&#xff1f; 是指这样一个数列&#xff1a;0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13……这个数列从第3项开始 &#xff0c;每一项都等于前两…

互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播

在建筑行业&#xff0c;施工现场的安全管理和实时监控一直是项目管理中的重点。随着技术的进步&#xff0c;无人机工地直播技术成为了一种新兴的解决方案&#xff0c;它不仅能够提高施工透明度&#xff0c;还能够加强现场安全管理。EasyDSS作为一种先进的流媒体技术平台&#x…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络&#xff1f; 模拟器使用的是电脑本身的网络&#xff0c;不通过代理即可访问网络。 2、创建子window后&#xff0c;锁屏很短时间内&#xff0c;应用会被杀死&#xff1f; 没开长时任务&#xff0c;锁屏和退后台保活要开长时任务。 应用退至后台后&…

计算机网络 (18)使用广播信道的数据链路层

一、广播信道的基本概念 广播信道是一种允许一个发送者向多个接收者发送数据的通信信道。在计算机网络中&#xff0c;广播信道通常用于局域网&#xff08;LAN&#xff09;内部的主机之间的通信。这种通信方式的主要优点是可以节省线路&#xff0c;实现资源共享。 二、广播信道数…

深度学习——损失函数汇总

1. 连续值损失函数 总结:主要使用胡贝儿损失函数,应用于连续数值的预测之间的误差损失,参考地址 import torch import torch.nn as nna = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) b = torch.tensor([[3, 5], [8, 6]], dtype=torch.float)loss_fn1 = torch.nn.M…

github 项目分享

今天和大家分享一些github上面搜到关于卫星遥感和水环境相关的项目。 一、WaterDetect 使用端到端算法去识别水体范围的算法&#xff0c;针对哨兵2卫星遥感数据可用。 项目地址&#xff1a; https://github.com/cordmaur/WaterDetect 二、DeepWaterMap 深度卷积神经网络去…

音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件

一、错误的命令 通过FFmpeg命令可以将mp4文件转换为ps文件&#xff0c;PS文件中包含PS流数据。 由于PS流/PS文件对应的FFInputFormat结构为&#xff1a; const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL…