lc marathon 7.16

2023-11-07

138. 复制带随机指针的链表

关键是 建立 旧节点->新节点 的映射

"""
# Definition for a Node.
class Node:
    def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
        self.val = int(x)
        self.next = next
        self.random = random
"""

class Solution:
    def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':
        dic={}
        p=head # p指向当前被复制的节点
        dumphead=Node(-1)
        q=dumphead# q指向复制链的最后一个节点,需要连接本轮复制的节点
        while(p!=None):
            node_c=Node(p.val)#进行复制
            q.next=node_c # 连接复制节点
            dic[p]=node_c # 加入映射
            q=q.next # q节点继续指向最后一个
            p=p.next # p节点前进
        # 复制random的指向
        p=head 
        q=dumphead.next # p,q 节点同步出发
        while(p!=None):
            if p.random!=None:
                q.random=dic[p.random]
            p=p.next
            q=q.next
        return dumphead.next
剑指 Offer II 092. 翻转字符
    # 遍历每一位 ,并假设 这一位 为第一个开始的1(或者最后一个0)(前面全0,后面全1) 的翻转次数
    # 为了将时间复杂度降到O(N)
    # 我们遍历每位时,需要该数前面1的个数,和后面0的个数
    # 在有字符串0的总数的情况下,需要每个位置后面0的个数
class Solution:
    def minFlipsMonoIncr(self, s: str) -> int:
        num_s=list(s)
        count_0=s.count('0') # 0的总个数
        num_0=[0 for i in range(len(s))] #存储每个位置后面0的个数
        if len(s)==1 or len(s)==0:
            return 0
        if s[0]=='1':  # 如果第一位是1,则后面为全部0
            num_0[0]=count_0
        elif s[0]=='0':
            num_0[0]=count_0-1 # 如果第一位是1,则后面为全部0的个数减一
        for i in range(1,len(num_s)):
            if num_s[i]=='1':
                num_0[i]=num_0[i-1]
            else:
                num_0[i]=num_0[i-1]-1
        mini=9999 # 用于存储最少翻转次数
        dic={'0':1,'1':0}
        for i in range(len(num_s)):
            #i 当前数 前面的数的个数
            pre0=count_0-dic[num_s[i]]-num_0[i]#当前数 前面0的个数
            pre1=i-pre0#当前数 前面1的个数
            mini=min(mini,pre1+num_0[i])
        return mini
面试题 08.09. 括号

记忆化存储+回溯 是真滴好用啊

def generateParenthesis( n: int) :

    return gen(n)

@cache
def gen(n):
    if n==0:
        return [""]
    if n==1:
        return ["()"]
    rs=set()
    for i in range(n-1):
        for pre in gen(i):
            for las in gen(n-i-1):
                rs.add(pre+'('+las+')')
                rs.add(pre+'()'+las)
                rs.add('('+pre+')'+las)
    return list(rs)


if __name__ == '__main__':
    print(generateParenthesis(3))
面试题 05.03. 翻转数位

求补码(为了兼容负数)bin(num & 0xfffffffff

class Solution:
    def reverseBits(self, num: int) -> int:
        if num==-1:
            return 32
        numbin=str(bin(num & 0xffffffff))[2:]#转化成2进制
        # 遍历每个数,我们需要到0时,记录在它之前连续的1的个数,并获得它之后连续1的个数
        pre=0 #记录在0之前连续1的个数 
        las=0 #记录在0之后连续1的个数
        i=0
        #0000
        maxo=0# 记录转换后 最长连续1的个数
        while(i<len(numbin)):
            if numbin[i]=='1': # 记录1的个数
                pre+=1
                i=i+1
            elif numbin[i]=='0':
                ori=i # 存储当前i的位置
                i=i+1 # 跳到下一位 
                while(i<len(numbin) and numbin[i]=='1'):
                    i+=1
                # 最终i跳到下一个0的位置 或者 len(numbin)
                las=i-ori-1 # 代表在0之后连续1的个数
                maxo=max(maxo,pre+las+1)
                pre=las # 
                las=0
        maxo=max(pre+1,maxo)
        return maxo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lc marathon 7.16 的相关文章

随机推荐

  • java判断一个数字是否为偶数的几种方式

    java判断一个数字是否为偶数的几种方式 第一种 取余 function isOdd n if n 2 0 console log n 是偶数 else if n 2 1 console log n 是奇数 else console log
  • Pytorch训练时显存分配过程探究

    对于显存不充足的炼丹研究者来说 弄清楚Pytorch显存的分配机制是很有必要的 下面直接通过实验来推出Pytorch显存的分配过程 实验实验代码如下 import torch from torch import cuda x torch z
  • 【BIOS】Bios设置通电即自动开机。

    问题需求 设置电脑 服务器接通电源后 自动开机 解决方案 不同主板的bios设置不一样 但方向都差不多 在此整理一些不同准版bios的设置方法 通用主板Bios 开机后连续按del键 进入Bios 切换到 Advanced 菜单下 找到 A
  • 使用SOLIDWORKS方程式绘制渐开线齿轮

    在SOLIDWORKS中 有时需要在参数之间建立关联 但这种关联却无法通过使用几何关系或常规的建模技术来实现 这时我们就可以使用方程式来建立模型中尺寸之间的数学关系 在方程式驱动的曲线中最经典的就是渐开线了 这也是绘制齿轮时不可或缺的线条类
  • Qt 编译错误 提示TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension(0x27a9278) is not

    编译Qt 时提示错误 TypeError Property asciify of object Core Internal UtilsJsExtension 0x27a9278 is not a functio 说明 出现这个错误的表层原因
  • LeetCode-679.24 点游戏、深度优先搜索算法DFS

    来源 力扣 LeetCode 题目分析 括号运算符仅仅表达了一个运算顺序 可以不用考虑 实际的运算类型就 4 种 一共只有 4 个数 因此所有组合的可能性是有限的 DFS 算法就是对当前的所有可能的操作进行枚举 当前的操作即从可选的数字中挑
  • 国内获取Docker镜像缓慢

    国内获取Docker镜像时 访问 https hub docker com 速度缓慢 只有几十K左右 这种情况可以使用国内的一些docker镜像 例如 网易蜂巢 阿里巴巴 LUG USTC等 此处介绍使用中国科学技术大学 LUG USTC
  • 【分享】免费的AI绘画网站(5个)

    哈喽 大家好 我是木易巷 随着人工智能技术的不断发展 越来越多的AI绘画软件开始涌现 如果你想要免费享受AI绘画的乐趣 那你可要好好看下面的内容 Vega AI创作平台 入口 https rightbrain art 一款专业的人工智能创作
  • AI 工具合辑盘点(八)持续更新 之 AI 面部生成工具和AI 角色生成工具

    一 AI 面部生成工具 需要一张真实人物的肖像画来用于你的营销材料 正在寻找具有特定面部特征的模特 但你的预算有限 正在创建你的买家人物 但不想从互联网上窃取图片 如果是这样 也许AI面部生成器可以作为解决方案 它们利用先进的图像处理技术
  • springboot 项目 docker 启动镜像 读不到application配置

    Dockerfile FROM openjdk 17 RUN cd RUN mkdir p config 删除旧jar包 RUN rm rf springboot3 jar 重新复制jar包 ARG JAR FILE ADD target
  • Maven问题:To see the full stack trace of the errors, re-run Maven with the -e switch.

    报错如下 ERROR gt Help 1 ERROR ERROR To see the full stack trace of the errors re run Maven with the e switch ERROR Re run M
  • C语言之详解静态变量static

    在C语言中static是用来修饰变量和函数的 这篇文章详细介绍了static主要作用 文章中有详细的代码实例 需要的朋友可以参考阅读 在C语言中 static是用来修饰变量和函数的 static主要作用为 1 修饰局部变量 静态局部变量 2
  • 在idea中快速构建方法的说明注释,带有参数信息

    在方法上面输入 然后按Ctrl enter即可 下面都是自动生成的内容 param request param response param handler return throws Exception Override public b
  • git命令超实用总结(23条超实用命令)

    本文总结了常见的23个git使用场景的处理方法 足够应对日常学习工作中对git的使用 文章目录 1 添加SSH验证免登陆 2 将本地项目上传GitHub 2 1 如果是新项目 本地还没有代码 2 2 如果想直接使用远程的代码 2 3 如果是
  • Android studio 3.5 debug 包不能安装

    debug模式下编译出的apk无法安装 可在根目录gradle properties中配置 android injected testOnly false
  • HTTP 隧道

    本文摘自书籍 HTTP 权威指南 此系列文章对应 github地址 隧道 可以通过 HTTP 应用程序访问使用非 HTTP 协议的应用程序 Web 隧道允许用户通过 HTTP 连接发送非 HTTP 流量 这样就可以在 HTTP 上捎带其他协
  • 2023牛客暑期多校训练营7 I We Love Strings

    https ac nowcoder com acm contest 57361 I 分治 容斥原理 include
  • [es6] 模板字符串内添加if判断

    我之前一只知道模板字符串中可以用三目运算符做判断 但今天有个需求要在模板字符串中添加if条件语句 于是百度了一下 在此记录一下 直接看代码吧 var html div class p 1 p p 2 p p 3 p p function i
  • Mybatis返回自增主键id的值,2种方式

    1 方式一 不建议使用 有BUG的方式 通过useGeneratedKeys true keyProperty id 来设置返回新的id值 这里有个问题就是 通过这种方式插入的值 经常会返回1 原因是因为他这里的意思是返回当前影响的行数 不
  • lc marathon 7.16

    文章目录 138 复制带随机指针的链表 https leetcode cn problems copy list with random pointer 剑指 Offer II 092 翻转字符 https leetcode cn prob