LeetCode题目汇总

第1章 排序

215. 数组中的第K个最大元素

第2章 二分法

4. 寻找两个正序数组的中位数

33. 搜索旋转排序数组

69. x 的平方根

704. 二分查找

剑指 Offer 11. 旋转数组的最小数字

第3章 字符串

8. 字符串转换整数 (atoi)

151. 翻转字符串里的单词

415. 字符串相加

第4章 数组

1. 两数之和

41. 缺失的第一个正数

283. 移动零

剑指 Offer 29. 顺时针打印矩阵

第5章 双指针和滑动窗口

3. 无重复字符的最长子串

15. 三数之和

剑指 Offer 48. 最长不含重复字符的子字符串

剑指 Offer 49. 丑数

第6章 位运算和数学

7. 整数反转

剑指 Offer 61. 扑克牌中的顺子

第7章 链表

2. 两数相加

21. 合并两个有序链表

25. K 个一组翻转链表

160. 相交链表

206. 反转链表

234. 回文链表

445. 两数相加 II

876. 链表的中间结点

剑指 Offer 52. 两个链表的第一个公共节点

第8章 栈

20. 有效的括号

第9章 队列

347. 前 K 个高频元素

剑指 Offer 41. 数据流中的中位数

第10章 二叉树

100. 相同的树

101. 对称二叉树

104. 二叉树的最大深度

105. 从前序与中序遍历序列构造二叉树

110. 平衡二叉树

111. 二叉树的最小深度

112. 路径总和

113. 路径总和 II

199. 二叉树的右视图

257. 二叉树的所有路径

958. 二叉树的完全性检验

剑指 Offer 32 - I. 从上到下打印二叉树

剑指 Offer 32 - II. 从上到下打印二叉树 II

剑指 Offer 32 - III. 从上到下打印二叉树 III

剑指 Offer 33. 二叉搜索树的后序遍历序列

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 55 - I. 二叉树的深度

剑指 Offer 55 - II. 平衡二叉树

第11章 深度优先遍历(回溯)

第12章 广度优先遍历

102. 二叉树的层序遍历

662. 二叉树最大宽度

第13章 动态规划

62. 不同路径

63. 不同路径 II

124. 二叉树中的最大路径和

300. 最长上升子序列

322. 零钱兑换

509. 斐波那契数

543. 二叉树的直径

剑指 Offer 42. 连续子数组的最大和

第14章 贪心算法

第15章 系统设计

146. LRU缓存机制

460. LFU缓存

TODO

23. 合并K个升序链表

103. 二叉树的锯齿形层次遍历

125. 验证回文串

128. 最长连续序列

141. 环形链表

142. 环形链表 II

169. 多数元素

344. 反转字符串

680. 验证回文字符串 Ⅱ

796. 旋转字符串

814. 二叉树剪枝

842. 将数组拆分成斐波那契序列

977. 有序数组的平方

994. 腐烂的橘子

1147. 段式回文

1201. 丑数 III


小技巧

判断奇偶

&1的结果为1则为奇数,为0则为偶数。

  1. if ((sum&1) == 1) return false; // 如果为奇数,则返回false

乘2/除2

左移<<1表示乘以2,右移>>1表示除以2。>>2表示右移两次,除以2两次。>>>表示无符号右移。

  1. long[] rs = new long[nums.length];
  2. rs[0] = 1;
  3. for (int i = 1; i < nums.length; ++i) {
  4. rs[i] = (rs[i - 1] << 1) % MOD;
  5. }

最大公约数

欧几里德算法(又称辗转相除法)。

  1. public static int GCD(int a, int b) {
  2. return b == 0 ? a : GCD(b, a%b);
  3. }

质数

判断是否是质数。

public static boolean isPrime(int n) {
        if(n < 2) {
            return false;
        } else if(n == 2) {
            return true;
        } else {
            for(int i = 2; i <= Math.sqrt(n); i++) {
                if(n % i == 0) {
                    return false;
                }
            }
        }
        return true;
    }

筛选法找质数。筛选法就是从小到大一次出去已知素数的所有倍数,例如2的倍数4,6, 8··· 3的倍数9,12···(6已经被筛去) 依次类推,最后剩余的就是所求的值。

public class PrimeTest2 {
   public static void main(String[] args){
       int[] a = new int[101];
       for(int i=0;i<101;i++){
           a[i] = 1;
       }

       for(int i=2;i<101;i++){
          if(a[i] != 0){
             for(int j=i+i;j<101;){
                if(j%i == 0){
                    a[j] = 0;
                }
                j = j+1;
             }
          }
       }

       for(int i=2;i<101;i++){
         if(a[i] != 0){
            System.out.println(i);
         }
       }
   }
}