Go_Easy_Algorithm
[toc]
7. 整数反转 #for #整型
Difficulty: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输入:x = -123 输出:-321 示例 3: 输入:x = 120 输出:21 示例 4: 输入:x = 0 输出:0 提示: -231 <= x <= 231 - 1
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2<sup>31</sup>, 2<sup>31 </sup>− 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
1 | |
示例 2:
1 | |
示例 3:
1 | |
示例 4:
1 | |
提示:
-2<sup>31</sup> <= x <= 2<sup>31</sup> - 1
Solution
Language: go
1 | |
1614. 括号的最大嵌套深度 #字符串 #for
如果字符串满足以下条件之一,则可以称之为 有效括号字符串**(valid parentheses string,可以简写为 VPS**):
- 字符串是一个空字符串
"",或者是一个不为"("或")"的单字符。 - 字符串可以写为
AB(A与B字符串连接),其中A和B都是 有效括号字符串 。 - 字符串可以写为
(A),其中A是一个 有效括号字符串 。
类似地,可以定义任何有效括号字符串 S 的 嵌套深度 depth(S):
depth("") = 0depth(C) = 0,其中C是单个字符的字符串,且该字符不是"("或者")"depth(A + B) = max(depth(A), depth(B)),其中A和B都是 有效括号字符串depth("(" + A + ")") = 1 + depth(A),其中A是一个 有效括号字符串
例如:""、"()()"、"()(()())" 都是 有效括号字符串(嵌套深度分别为 0、1、2),而 ")(" 、"(()" 都不是 有效括号字符串 。
给你一个 有效括号字符串 s,返回该字符串的s 嵌套深度 。
示例 1:
1 | |
示例 2:
1 | |
示例 3:
1 | |
示例 4:
1 | |
提示:
1 <= s.length <= 100s由数字0-9和字符'+'、'-'、'*'、'/'、'('、')'组成- 题目数据保证括号表达式
s是 有效的括号表达式
Solution
Language: go
1 | |
71. 简化路径 #字符串切割 #栈
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠
'/'开头。 - 两个目录名之间必须只有一个斜杠
'/'。 - 最后一个目录名(如果存在)不能 以
'/'结尾。 - 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含
'.'或'..')。
返回简化后得到的 规范路径 。
示例 1:
1 | |
示例 2:
1 | |
示例 3:
1 | |
示例 4:
1 | |
提示:
1 <= path.length <= 3000path由英文字母,数字,'.','/'或'_'组成。path是一个有效的 Unix 风格绝对路径。
Solution
Language: go
1 | |
1576. 替换所有的问号 #字符串
给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 '?' 字符。
题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。
示例 1:
1 | |
示例 2:
1 | |
示例 3:
1 | |
示例 4:
1 | |
提示:
1 <= s.length <= 100s仅包含小写英文字母和'?'字符
Solution
Language: go
1 | |
1629. 按键持续时间最长的键 #数组
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。
给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。
测试人员想要找出按键 持续时间最长 的键。第 i次按键的持续时间为 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按键的持续时间为 releaseTimes[0] 。
注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。
请返回按键 持续时间最长 的键,如果有多个这样的键,则返回 按字母顺序排列最大 的那个键。
示例 1:
1 | |
示例 2:
1 | |
提示:
releaseTimes.length == nkeysPressed.length == n2 <= n <= 10001 <= releaseTimes[i] <= 10<sup>9</sup>releaseTimes[i] < releaseTimes[i+1]keysPressed仅由小写英文字母组成
Solution
Language: go
1 | |
206. 反转链表 #链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:

1 | |
示例 2:

1 | |
示例 3:
1 | |
提示:
- 链表中节点的数目范围是
[0, 5000] -5000 <= Node.val <= 5000
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
Solution
1 | |
121. 买卖股票的最佳时机 #数组 #dp
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
1 | |
示例 2:
1 | |
提示:
1 <= prices.length <= 10<sup>5</sup>0 <= prices[i] <= 10<sup>4</sup>
Solution
1 | |
剑指 Offer 03. 数组中重复的数字 #数组 #坐标交换
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
1 | |
限制:
2 <= n <= 100000
Solution
坐标交换:通俗讲就是每个人都有一个自己位置,坐标交换就是先把每个人都放到自己的位置上,当发现自己的位置被人占了以后,就说明出现了重复元素。
1 | |








