1. Two Sum
leetcode link
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
题解思路1 暴力枚举
暴力解法,两层循环遍历数组,找到和为目标值的两个数。
复杂度分析
解释:
外层循环需要遍历整个数组,执行 n 次, 内层循环对于第 i 个元素需要遍历 (n-i) 次, 总的执行次数是:
(n−1)+(n−2)+...+2+1 = 2n(n−1) = 2n2−n = 21n2 - 21n。
在大 O 表示法中,我们主要关注的是函数增长的最高阶项,并且忽略常数项和系数,
当 n 趋向于无穷大时:n² 的增长速度远超过 n, 常数项 1/2 的影响可以忽略,所以最终决定增长速度的是最高阶项 n²,
因此,时间复杂度为 O(N^2),同样这里的空间复杂度表示为O(1),而不是O(2),因为不管是用了 1 个、2 个还是 3 个变量,
它们的空间占用都是固定的,不会随着输入数据的规模 n 的增长而增长。所以在大 O 表示法中,它们都简化表示为 O(1)。
题解思路2 哈希表
2. Add Two Numbers
leetcode link
3. Longest Substring Without Repeating Characters
leetcode link
leetcode link
题解思路1 暴力解法
有序合并两个数组,然后取中位数
时间复杂度:O(m+n),空间复杂度:O(m+n)
题解思路2 直接确定中位数位置在哪
因为数组是有序的,所以没有必要合并数组,直接确定中位数位置在哪,然后取值即可。
5. Longest Palindromic Substring
leetcode link
题解思路1 中心扩散
题解思路2 动态规划
当dp[l][r] = true 时,表示 s[l] 到 s[r] 是回文子串,那么 dp[l+1][r-1] 也是回文子串。
当已知dp[l][r] = true 时,当s[l] === s[r] 时,dp[l-1][r+1] = true
- …
a
… 当 l=x,r=x
时,s[l] === s[r]
r-l = 0
是回文子串
- …
aa
… 当 l=x,r=x+1
时,s[l] === s[r]
r-l = 1
是回文子串
- …
aba
… 当 l=x-1,r=x+1
时,s[l] === s[r]
r-l = 2
是回文子串
- …
abba
… 当 l=x-1,r=x+2
时,s[l] === s[r]
r-l = 3
是回文子串 此时 dp[l+1][r-1] = true
- …
abca
… 当 l=x-1,r=x+2
时,s[l] !== s[r]
r-l = 3
不是回文子串 此时 dp[l+1][r-1] = false
6. Zigzag Conversion
leetcode link
可以想象就是在不同高度放置字符,然后按行输出。
7. Reverse Integer
leetcode link
8. String to Integer (atoi)
leetcode link
9. Palindrome Number
leetcode link
10. Regular Expression Matching
leetcode link