本文记录LeetCode练习。
算法
两数之和
1 | class Solution { |
两数相加
1 | /** |
最大数
1 | class Solution { |
无重复字符的最长子串
1 | class Solution { |
寻找两个有序数组的中位数
1 | class Solution { |
最长回文子串
1 | class Solution { |
Z 字形变换
思路分析:
以 row = 5 为例,
1 | 1 9 17 25 33 |
取出竖列
k(第K行)\i(第i列) | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 9 | 17 | 25 | 33 |
2 | 2 | 10 | 18 | 26 | 34 |
3 | 3 | 11 | 19 | 27 | 35 |
4 | 4 | 12 | 20 | 28 | 36 |
5 | 5 | 13 | 21 | 29 | 37 |
可以得到竖列取值的规律:
- 当 row != 1 时, m = k+2(i-1)(n-1),
- 当 row = 1 时, m = i.
其中 k : 层级, i : 列数,n : 行数, m:对应竖列上的值
分析每个数列中间值关系
i | k | ans |
---|---|---|
2 | 1 | m+8 |
2 | 2 | m+6 |
2 | 3 | m+4 |
2 | 4 | m+2 |
2 | 5 | m+0 |
* | * | * |
i’ | n | m+2(n-k) 中间值ans看着像和i是无关的,事实上是有关的,别忘了m的取值 |
得出结论,中间值的规律:
- ans = m+2(n-k)
算法实现如下 :
1 | class Solution |
整数反转
法一: 栈思想
1 | class Solution { |
法二: 字符串反转
1 | class Solution { |
SQL架构
第二高的薪水
1 | select (select distinct(Salary) from Employee order by Salary DESC limit 1 offset 1) as SecondHighestSalary |
第N高的薪水
1 | CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT |
分数排名
1 | SELECT a.Score,(select count(distinct(b.Score)) from Scores as b where b.Score>a.Score)+1 as Rank FROM Scores as a ORDER BY Score DESC |
连续出现的数字
1 | select distinct Num as ConsecutiveNums |
不懂自定义变量的同学可以参考mysql中的用户变量