力扣234单周赛解题分享

LeetCode(力扣) 234题:回文链表----三种方法求解附带详细注释 题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 输入:head = [1,2,2,1] 输出:true 输入:head = [1,2] 输出:false 思路分析 看到这道题,相信很多朋友跟我一样,就想把链表里的元素放在列表里,然后判断列表是否为回文链表。当然这是第一种最简单直观容易想到的方法。 但是有没有其他方法?能不能像证明回文字符串那样,采用双指针的方法来解决回文链表的问题呢?答案是可以的,但是需要用到递归 阅读详情

5713. 字符串中不同整数的数目

https://leetcode-cn.com/problems/number-of-different-integers-in-a-string/

难度:简单

题目:

给你一个字符串 word ,该字符串由数字和小写英文字母组成。

请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123"、"34"、"8" 和 "34" 。

返回对 word 完成替换后形成的 不同 整数的数目。

只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。

提示:

1 <= word.length <= 1000

word 由数字和小写英文字母组成

示例:

示例 1:

输入:word = "a123bc34d8ef34"

输出:3

解释:不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次。

示例 2:

输入:word = "leet1234code234"

输出:2

示例 3:

输入:word = "a1b01c001"

输出:1

解释:"1"、"01" 和 "001" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。

分析

作为周赛第一道简单题,在字符串中截取数字,完成计数后返回,本身没有太多难度,这里需要注意两点:

  1. 重复的数字只记录一次,那么使用set集合来计数比较方便。
  2. 前导0的数字需要忽略,通过这个条件我们可以使用栈来记录临时数字。当数字入栈前判断栈的长度是否为1且值为0.
    如果是这样,出栈0后再入栈。这道题前10的选手好几人因为这点都出现了提交错误,值得重视细节。

解题:

class Solution:
    def numDifferentIntegers(self, word):
        ret = set()
        stack = []
        for i in word:
            if i.isdigit():
                if len(stack) == 1 and stack[-1] == '0':
                    stack.pop()
                stack.append(i)
            else:
                if stack:
                    ret.add(''.join(stack))
                stack = []
        if stack:
            ret.add(''.join(stack))
        return len(ret)

5714. 替换字符串中的括号内容

https://leetcode-cn.com/problems/evaluate-the-bracket-pairs-of-a-string/

难度:中等

题目:

给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。

比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 "name" 和 "age" 。
你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。

你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 keyi 时,你需要:

将 keyi 和括号用对应的值 valuei 替换。
如果从 knowledge 中无法得知某个键对应的值,你需要将 keyi 和括号用问号 "?" 替换(不需要引号)。
knowledge 中每个键最多只会出现一次。s 中不会有嵌套的括号。

请你返回替换 所有 括号对后的结果字符串。

提示:

1 <= s.length <= 105
0 <= knowledge.length <= 105
knowledge[i].length == 2
1 <= keyi.length, valuei.length <= 10
s 只包含小写英文字母和圆括号 '(' 和 ')' 。
s 中每一个左圆括号 '(' 都有对应的右圆括号 ')' 。
s 中每对括号内的键都不会为空。
s 中不会有嵌套括号对。
keyi 和 valuei 只包含小写英文字母。
knowledge 中的 keyi 不会重复。

示例:

示例 1:

输入:s = "(name)is(age)yearsold", knowledge = [["name","bob"],["age","two"]]

输出:"bobistwoyearsold"

解释:

键 "name" 对应的值为 "bob" ,所以将 "(name)" 替换为 "bob" 。

键 "age" 对应的值为 "two" ,所以将 "(age)" 替换为 "two" 。

示例 2:

输入:s = "hi(name)", knowledge = [["a","b"]]

输出:"hi?"

解释:
由于不知道键 "name" 对应的值,所以用 "?" 替换 "(name)" 。

示例 3:

输入:s = "(a)(a)(a)aaa", knowledge = [["a","yes"]]

输出:"yesyesyesaaa"

解释:
相同的键在 s 中可能会出现多次。
键 "a" 对应的值为 "yes" ,所以将所有的 "(a)" 替换为 "yes" 。
注意,不在括号里的 "a" 不需要被替换。

示例 4:

输入:s = "(a)(b)", knowledge = [["a","b"],["b","a"]]

输出:"ba"

分析

很奇怪这道题居然很多人会超时...
看到括号匹配,优先去考虑栈的操作
这道题的knowledge明显可以被转换成字典
然后根据左右括号,完成出入栈与key的判断,轻松解题即可!

解题:

class Solution:
    def evaluate(self, s, knowledge):
        # 转换knowl为字典
        paras = {i[0]: i[1] for i in knowledge}
        stack = []
        ret = ''
        # 创建转换标识符
        change = False
        for i in s:
            # 当左括号将标识符设置为True
            if i == '(':
                change = True
            elif i == ')':
                # 当遇到右括号,重置标识符与stack并开始判断knowledge
                change = False
                ret += paras.get(''.join(stack), '?')
                stack = []
            else:
                # change为False追加字符串,为True时append栈等待获取key
                if change:
                    stack.append(i)
                else:
                    ret += i
        return ret

1806. 还原排列的最少操作步数

https://leetcode-cn.com/problems/minimum-number-of-operations-to-reinitialize-a-permutation/

难度:中等

题目:

给你一个偶数 n ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i(下标 从 0 开始 计数)。

一步操作中,你将创建一个新数组 arr ,对于每个 i :

如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2]
如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2]
然后将 arr 赋值给 perm 。

要想使 perm 回到排列初始值,至少需要执行多少步操作?返回最小的 非零 操作步数。

示例:

示例 1:

输入:n = 2

输出:1

解释:最初,perm = [0,1]

第 1 步操作后,perm = [0,1]

所以,仅需执行 1 步操作

示例 2:

输入:n = 4

输出:2

解释:最初,perm = [0,1,2,3]

第 1 步操作后,perm = [0,2,1,3]

第 2 步操作后,perm = [0,1,2,3]

所以,仅需执行 2 步操作

示例 3:

输入:n = 6

输出:4

分析

这道题卡了很久,一直在想有什么变换的规律,最终还是放弃了
刚开始使用递归整个数组遍历,获取数组的变更,代码量比较多
但算是通过了...
下午看到一个大佬的解题,自惭形秽,分享给大家。
其实规律就是那么简单,只是一个半小时时间太短没时间考虑啊...

解题1:

列表复制,递归判断列表内容是否相等

from copy import copy

class Solution:
    def __init__(self):
        self.n = 0
        self.perm = []
        self.count = 0

    def change(self, perm):
        arr = copy(perm)
        for i in range(self.n):
            if i % 2 == 0:
                arr[i] = perm[i // 2]
            else:
                arr[i] = perm[self.n // 2 + (i - 1) // 2]
        print(arr)
        self.count += 1
        if arr == self.perm:
            return self.count
        else:
            return self.change(arr)

    def reinitializePermutation(self, n: int) -> int:
        self.n = n
        self.perm = [i for i in range(self.n)]
        return self.change(self.perm)

解题2:

class Solution:
    def reinitializePermutation(self, n: int) -> int:
        count = 1
        origin = [i for i in range(n)]
        arr = origin[::2]+origin[1::2]
        while origin != arr:
            arr = arr[::2]+arr[1::2]
            count += 1
        return count

欢迎关注我的公众号: 清风Python

我的个人博客:https://qingfengpython.cn

网易面试题之 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因, * 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k, 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因, * 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k, * 顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。 */ 阅读详情

相关推荐

icem二维非结构网格划分_ICEM CFD网格装配

正文共:718字7图 预计阅读时间:2分钟1 前言 对于一些大型的复杂的网格划分,可以将整个模型切分成多个子模型(二维几何用线切分,三维模型用面切分),然后对各个模型单独划分网格,最终装配在一起。这和机械设计的零件设计和装配设计有点相似,这个功...

weixin_39908758的博客 1625

【LeetCode力扣】234 快慢指针 | 反转链表 | 还原链表

234. 回文链表 - 力扣(LeetCode)判断回文,就是判断是否是对称的。有些朋友对于数组的回文判断非常熟悉,但是对链表的回文判断可能就无从下手了,其实都一样的。有一种非常简单的方式就是将链表转化成数组,然后就是判断该数组是否回文就可以了,这种方式统称暴力破解法,简单粗暴。下面就来先带着大家看一下这道题的暴力破解法。

Hacynn的博客 1496

用yolov8训练自己的模型并调取摄像头实时检测,新手小白超友好教程!逻辑梳理,从0开始逐步实操❤

帮新手小白学会用yolov8,包含多篇高质量博客整理

Lhhhhds的博客 2941

leetcode周赛234-二,三题

第二题 题意 给你一个偶数 n​​​​​​ ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i​(下标 从 0 开始 计数)。 一步操作中,你将创建一个新数组 arr ,对于每个 i : 如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2] 如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2] 然后将 arr​​ 赋值​​给 perm 。 要想使 perm 回到排列初始值,至少需要执行多少步操作?返回最小的

tangshuai96的博客 282

SAP PS项目结算实操:从CJ20N到CJ88,手把手搞定项目成本结转与凭证生成

本文详细解析SAP PS项目结算全流程,从CJ20N到CJ88的操作要点,涵盖成本归集、结算规则配置、结果分析及凭证生成等关键环节。特别针对FICO模块中的项目凭证流转问题提供实战解决方案,帮助财务人员规避常见配置错误,提升项目结算效率与准确性。

weixin_26833503的博客 813

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 474

LeetCode——1806. 还原排列的最少操作步数(Minimum Number of Operations to Reinitialize a...)[中等]——分析及代码(Java)

LeetCode——1806. 还原排列的最少操作步数[Minimum Number of Operations to Reinitialize a Permutation][中等]——分析及代码[Java]一、题目二、分析及代码1. 模拟(1)思路(2)代码(3)结果三、其他 一、题目 给你一个偶数 n,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i(下标 从 0 开始 计数)。 一步操作中,你将创建一个新数组 arr ,对于每个 i : 如果 i % 2 == 0 ,那么

江南土豆的博客 380

从CPRI到eCPRI:手把手教你用Wireshark分析基站前传协议帧结构

本文手把手教你使用Wireshark工具,深入解析从CPRI到eCPRI的基站前传协议帧结构。通过搭建分析环境、编写解析脚本,并对比两者在时延管理、帧格式及数据封装上的差异,为无线通信领域的研发与测试人员提供了一套实用的逆向分析与故障排查方法。

x8y9z0的博客 604

[LeetCode 1806] 还原排列的最少操作步数 [参考]

文章目录题目描述相关知识点[数论]1. 整除2. 同余3. 同余传递性4. 同余式相乘思路代码 题目描述 输入是一个偶数n,对于一个长度为n的排列perm,这个排列满足perm[i] == i(下标从0开始计数),对这个排列进行若干步操作。 对于每一步操作: (1) 首先将创建一个新数组arr,对于每个i: 如果 i % 2 == 0,那么arr[i] == perm[i / 2] 如果 i % 2 == 1,那么arr[i] == perm[n / 2 + (i - 1) / 2] (2) 然后将ar

pgsld2333的博客 638

基于Lumerical FDTD的光栅耦合器宽带特性仿真与实验验证

本文详细介绍了基于Lumerical FDTD软件对光栅耦合器进行宽带特性仿真的完整流程。通过复现一个针对1310nm波段优化的经典光栅耦合器案例,文章从结构建模、光源设置、监视器布置到仿真运行与结果分析,逐步解析了如何准确模拟其耦合效率与带宽特性,并将仿真结果与实验数据进行对比验证,为硅光芯片的设计与优化提供了实用指导。

weixin_29294597的博客 512

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2056

Leetcode 第一周周赛总结(第 234 场周赛)

文章目录排名及做题情况闲聊第一题 字符串中不同整数的数目 Easy题目截图第一题 比赛未AC代码(卡了两个用例)第一题 赛后更正AC代码第二题 还原排列的最少操作步数 Mid题目截图第二题 比赛AC代码第三题 替换字符串中的括号内容 Mid题目截图第三题 比赛AC代码第四题 好因子的最大数目 Hard 排名及做题情况 国内2147名 全球5219名 做对了 两道Mid 一道Ez没有AC 卡了两个用例 Hard还没有时间看 闲聊 尽管说是第一场周赛 第一次参加这样的线上做题比赛哈哈哈哈 但是我起床

Love 6's Private Blog 634

手把手教你用Simulink搭建IEEE33节点配电网模型(附赠两本电力系统书籍)

本文详细介绍了如何使用Simulink搭建IEEE33节点配电网模型,涵盖从基础配置到高级应用的完整流程。通过MATLAB脚本自动化参数注入、监测系统部署和典型应用场景实战,帮助读者快速掌握配电仿真模型的核心技术。附赠两本电力系统经典书籍资源,助力深入学习与研究。

weixin_29073241的博客 248

LeetCode刷题记--- 292 / 1184 / 1806 / Offer39

文章目录1.每日吐槽2. leetcode每日一题3. 1184 公交站间的距离4. 1806 还原排列的最少操作5. 剑指Offer 39 1.每日吐槽 马上中秋放假了,欧耶 2. leetcode每日一题 292 Nim 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可

wr456wr的博客 339

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

排列组合(permutation)系列解题报告

本文讲解4道关于permutation的题目。 1. Permutation:输出permutation——基础递归 2. Permutation Sequence: 输出第k个permutation——推理 3. Next Permutation:给定一个permutation中的序列,求字典序它的下一个permutation是什么——逻辑推理 4. Permutation II:和第一题有细微的差别: 对于一个可能有重复元素的数组输出所有permutation——有条件dfs

Rachel Zhang的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构习题——第一章 绪论

第一章  绪论 一.选择题 1.数据结构被形式地定义为(K,R),其中K是①的有限集合,R是K上的②的有限集合。   ①A.算法      B.数据元素    C.数据操作     D.逻辑结构   ②A.操作      B.映象        C.存储         D.关系 2.算法分析的目的是①,算法分析的两个主要方面是②。     ①A.找出数据结构的合理性      B

Colin丶 2万+

1806. 还原排列的最少操作步数

题目描述 还原排列的最少操作步数 给你一个偶数 n​​​​​​ ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i​(下标 从 0 开始 计数)。 一步操作中,你将创建一个新数组 arr ,对于每个 i : 如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2] 如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2] 然后将 arr​​ 赋值​​给 perm 。 要想使 perm 回...

wweTHEUT的博客 431

LeetCode 1806. 还原排列的最少操作步数(模拟)

文章目录1. 题目2. 解题 1. 题目 给你一个偶数 n​​​​​​ ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i​(下标 从 0 开始 计数)。 一步操作中,你将创建一个新数组 arr ,对于每个 i : 如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2] 如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2] 然后将 arr​​ 赋值​​给 perm 。 要想使 perm 回到排列初始值,至

Michael是个半路程序员 823

Leetcode刷题 2021.03.28

Leetcode刷题 2021.03.28Leetcode5713 字符串中不同整数的数目Leetcode5714 替换字符串中的括号内容Leetcode1806 还原排列的最少操作步数 Leetcode5713 字符串中不同整数的数目 给你一个字符串 word ,该字符串由数字和小写英文字母组成。 请你用空格替换每个不是数字的字符。例如,“a123bc34d8ef34” 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):“123”、“34”、“8” 和 “

weixin_43447128的博客 361

力扣234-回文链表

参考网址: https://leetcode-cn.com/problems/palindrome-linked-list/solution/hui-wen-lian-biao-1zhan-2kuai-man-zhi-zhen-fan-zhu/ 使用快慢指针找到链表中间的位置,同时翻转前一部分链表,最后将翻转的链表与后半部分的链表进行比较即可。 ...

南北粉面馆 255

leetcode5714. 替换字符串中的括号内容(字典树)

解决方案: 用字典树存储键值对,遍历字符串进行替换。

qq_44729222的博客 277

力扣(LeetCode)234. 回文链表

请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 思路:寻找中间结点,然后将后半部分链表倒置,后半部分链表长度是小于或等于原链表的,所以根据后半部分链表来确定对比循环次数 #include<iostrea...

Pwnpanda的博客 632

力扣 - 234、回文链表

题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-linked-list 分析 数组+双指针 我们可以先遍历一遍计算出长度,然后再创建数组,再遍历一遍把节点数据放入数组中,然后在数组俩头

林夕07 365

力扣234_回文链表

题目描述: 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 算法思想: 方法一:双指针法 我们知道,判断一个数组的回文是非常简单的,只需要一头一尾两个指针,边走边检查即可,但是链表怎么办呢? 直接暴力,把链表存入数组,用数组的方法判断。 class Solution { public boolean isPalindrome(ListNode head) { //辅助数组部

Yungang_Young的博客 294

python编程题

7-1 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出 (10 分) 现需要统计若干段文字(英文)中的不同单词数量。如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。 注1:单词之间以空格(1个或多个空格)为间隔。注2:忽略空行或者空格行。注3:单词大小写敏感,即'word'与'WORD'是两...

weixin_30747253的博客 10万+

Leetcode 234:回文链表(最详细解决方案!!!)

请判断一个链表是否为回文链表。 示例 1: 输入: 1-&gt;2 输出: false 示例 2: 输入: 1-&gt;2-&gt;2-&gt;1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解题思路 我们首先想到的思路是通过建立一个list,然后将链表中的数存进去,然后判断这个list是否回文。但是这样做的空间复杂度是O(n...

coordinate的博客 7965
上一篇: 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
下一篇: 力扣每日一题:190.颠倒二进制位 ,常规解法与暴力投机!
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值