maoqitian / MyLeetCode

LeetCode learn,悟已往之不谏,知来者之可追,共勉。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LeetCode lean

LeetCode Algorithm

# Title Solution Difficulty
860 Lemonade Change(柠檬水找零) Javakotlin Easy
842 Split Array into Fibonacci Sequence(将数组拆分成斐波那契序列) Javakotlin Medium
637 Average of Levels in Binary Tree(二叉树的层平均值) Java Easy
344 Reverse String(反转字符串) Java Easy
297 Serialize and Deserialize Binary Tree(二叉树的序列化与反序列化) Java Hard
226 Invert Binary Tree(翻转二叉树) Java Easy
297 Serialize and Deserialize Binary Tree(二叉树的序列化与反序列化) Java Hard
206 Reverse Linked List(反转链表) Java Easy
145 Binary Tree Postorder Traversal(二叉树的后序遍历) Java Hard
144 Binary Tree Preorder Traversal(二叉树的前序遍历) Java Medium
142 Linked List Cycle II(环形链表 II) Java Medium
141 Linked List Cycle(环形链表) Java Easy
111 Minimum Depth of Binary Tree(二叉树的最小深度) Java Easy
110 Balanced Binary Tree(平衡二叉树) Java Easy
107 binary-tree-level-order-traversal-ii(二叉树的层次遍历-ii) Java Easy
104 Maximum Depth of Binary Tree(二叉树的最大深度) Java Easy
102 Binary Tree Level Order Traversal(二叉树的层序遍历) Javakotlin Medium
100 Symmetric Tree(相同的树) Java Easy
94 Binary Tree Inorder Traversal(二叉树的中序遍历) Java Medium
70 Climbing Stairs(爬楼梯) Java Easy
66 Plus One(加一) Java Easy
50 Pow(x, n)(x的n次幂) Java Medium
47 Permutations II(全排列 II) Java Medium
46 Permutations(全排列) Java Medium
43 Multiply Strings(字符串相乘) Java Medium
42 Trapping Rain Water(接雨水) Java Hard
35 Search Insert Position(索插入位置) Java Easy
33 Search in Rotated Sorted Array(搜索旋转排序数组) Java Medium
26 Remove Duplicates from Sorted Array(删除排序数组中的重复项.) Java Easy
25 Reverse Nodes in k-Group(k-个一组翻转链表) Java Hard
24 Swap Nodes in Pairs(两两交换链表中的节点) Java Medium
22 Generate Parentheses(括号生成) Java Medium
21 Merge Two Sorted Lists(合并两个有序链表) Java Easy
20 Valid Parentheses(有效的括号) Java Easy
17 Letter Combinations of a Phone Number(电话号码的字母组合) Java Medium
15 3Sum(三数之和) Java Medium
14 Longest Common Prefix(最长公共前缀) Java Easy
11 Container With Most Water(盛最多水的容器) Java Medium
9 Palindrome Number(回文数) Java Easy
7 Reverse Integer(整数反转) Java Easy
5 Longest Palindromic Substring(最长回文子串) Java Medium
4 Median of Two Sorted Arrays(寻找两个正序数组的中位数) Java Hard
3 Longest Substring Without Repeating Characters(无重复字符的最长子串) Java Medium
2 Add Two Numbers(两数相加) Javakotlin Medium
1 Two Sum(两数之和) Javakotlin Easy

算法**

最基本算法

if / else (判断)

for while (循环、迭代)

recursion (递归)

  • 递归本质也是循环,是通过函数体来进行的循环

解题思路

  1. 写出循环退出条件
  2. 处理逻辑
  3. 调用函数本身进入下一层递归
  4. 数据释放

递归模板代码

## Java
public void recur(int level, int param) { 
  // terminator 递归终结条件
  if (level > MAX_LEVEL) { 
    // process result 
    return; 
  }
  // process current logic 处理当前递归层逻辑
  process(level, param); 
  // drill down  调用下一层递归
  recur( level: level + 1, newParam); 
  // restore current status 清理当前层状态
 
}

数据结构优化**

  • 找重复部分,执行 for while (循环、迭代)或者recursion (递归)
  • 提升数据结构维度(比如一维变成二维)
  • 空间换时间

数据结构

  • 树结构是一种非线性的数据结构,树是以分支的关系定义的层次结构(树的结构定义是一个递归定义)
 public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
  }

二叉树

  • 有且仅有一个称之为根的节点,二叉树每个节点至多只能有两颗子树(无节点则成为空二叉树,只有一个根节点无子树也能称为二叉树)

二叉树的五种基本形态

树的遍历

  • 先序遍历(中左右)
  • 中序遍历(左中右)
  • 后序遍历(左右中)
# Title Solution Difficulty
145 Binary Tree Postorder Traversal(二叉树的后序遍历) Java Hard
94 Binary Tree Inorder Traversal(二叉树的中序遍历) Java Medium
144 Binary Tree Preorder Traversal(二叉树的前序遍历) Java Medium

DFS(深度优先遍历)

  • 递归**
  • 设置递归退出条件
  • 遍历结点和子结点
# Title Solution Difficulty
111 Minimum Depth of Binary Tree(二叉树的最小深度) Java Easy
104 Maximum Depth of Binary Tree(二叉树的最大深度) Java Easy

BFS(广度优先遍历)

  • 使用队列先进先出原则保存每一层结点
  • 并保存当前层存在的子节点到队列中
# Title Solution Difficulty
637 Average of Levels in Binary Tree(二叉树的层平均值) Java Easy
107 binary-tree-level-order-traversal-ii(二叉树的层次遍历-ii) Java Easy
102 Binary Tree Level Order Traversal(二叉树的层序遍历) Java Medium

基本数据结构

数组

  • 由类型相同的数据元素构成的有序集合

操作时间复杂度

  • 查找时间复杂度 O(1)
  • 增删时间复杂度度 O(n)
  • 头尾添加时间复杂度可以看做是 O(1)

链表

  • 单链表每个节点只包含一个指针域,也就是指向后继结点
  • 根据链表的结点所含指针个数、指针指向和指针连接方式,可将链表分为单链表、循环链表、双向链表、二叉链表、十字链表、邻接表、邻接多重表等。其中单链表、循环链表、双向链表用于实现线性表的链式存储结构,而其他类型链表多用于实现树和图等非线性结构。

操作时间复杂度

  • 查找时间复杂度 O(n)
  • 增删时间复杂度度 O(1)

实现(Java)

class LinkedList { 
    Node head; // head of list 
  
    /* Linked list Node*/
    class Node { 
        int data; 
        Node next; 
  
        // Constructor to create a new node 
        // Next is by default initialized 
        // as null 
        Node(int d) { data = d; } 
    } 
}

About

LeetCode learn,悟已往之不谏,知来者之可追,共勉。

License:Apache License 2.0


Languages

Language:Kotlin 54.3%Language:Java 45.6%Language:C++ 0.1%