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("") = 0
depth(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 <= 100
s
由数字0-9
和字符'+'
、'-'
、'*'
、'/'
、'('
、')'
组成- 题目数据保证括号表达式
s
是 有效的括号表达式
Solution
Language: go
1 |
|
71. 简化路径 #字符串切割 #栈
给你一个字符串 path
,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'
开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.
)表示当前目录本身;此外,两个点 (..
) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//'
)都被视为单个斜杠 '/'
。 对于此问题,任何其他格式的点(例如,'...'
)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠
'/'
开头。 - 两个目录名之间必须只有一个斜杠
'/'
。 - 最后一个目录名(如果存在)不能 以
'/'
结尾。 - 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含
'.'
或'..'
)。
返回简化后得到的 规范路径 。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
示例 4:
1 |
|
提示:
1 <= path.length <= 3000
path
由英文字母,数字,'.'
,'/'
或'_'
组成。path
是一个有效的 Unix 风格绝对路径。
Solution
Language: go
1 |
|
1576. 替换所有的问号 #字符串
给你一个仅包含小写英文字母和 '?'
字符的字符串 s
,请你将所有的 '?'
转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 '?'
字符。
题目测试用例保证 除 '?'
字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
示例 4:
1 |
|
提示:
1 <= s.length <= 100
s
仅包含小写英文字母和'?'
字符
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 == n
keysPressed.length == n
2 <= n <= 1000
1 <= 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 |
|