Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f979b80

Browse files
committed
20190706
1 parent f159bcb commit f979b80

File tree

6 files changed

+163
-9
lines changed

6 files changed

+163
-9
lines changed

‎code/lc144.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* 难度:Medium
66
* 分类:Stack, Tree
77
* 思路:左节点依次入栈
8-
* Tips:和lc94中序,lc145后序一起看
8+
* Tips:和lc94中序,lc145后序一起看, lc102
99
*/
1010
import java.util.ArrayList;
1111
import java.util.List;

‎code/lc145.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ public List<Integer> postorderTraversal(TreeNode root) {
3535
Collections.reverse(res); //反转链表
3636
return res;
3737
}
38+
3839
}

‎code/lc199.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package code;
2+
/*
3+
* 199. Binary Tree Right Side View
4+
* 题意:二叉树的右视图
5+
* 难度:Medium
6+
* 分类:Tree, Depth-first Search, Breadth-first Search
7+
* 思路:1.记录当前递归最大深度,每次把第一次出现深度的节点值输出即可
8+
* 2.层次遍历
9+
* Tips:
10+
*/
11+
import java.util.ArrayList;
12+
import java.util.LinkedList;
13+
import java.util.List;
14+
import java.util.Queue;
15+
16+
public class lc199 {
17+
public class TreeNode {
18+
int val;
19+
TreeNode left;
20+
TreeNode right;
21+
TreeNode(int x) {
22+
val = x;
23+
}
24+
}
25+
26+
int max_depth = 0;
27+
List<Integer> res = new ArrayList();
28+
public List<Integer> rightSideView(TreeNode root) {
29+
dfs(root, 1);
30+
return res;
31+
}
32+
33+
public void dfs(TreeNode root, int depth){
34+
if(root==null) return; //别忘了null
35+
if(depth>max_depth) {
36+
max_depth = depth;
37+
res.add(root.val);
38+
}
39+
dfs(root.right, depth+1);
40+
dfs(root.left, depth+1);
41+
}
42+
43+
public List<Integer> rightSideView2(TreeNode root) {
44+
List<Integer> res = new ArrayList();
45+
Queue<TreeNode> qu = new LinkedList(); //是一个队列,用LinkedList
46+
if(root!=null) qu.add(root);
47+
while(!qu.isEmpty()){
48+
int size = qu.size();
49+
while(size>0){
50+
TreeNode tn = qu.remove();
51+
if(size==1) res.add(tn.val); //==1的时候添加
52+
if(tn.left!=null) qu.add(tn.left);
53+
if(tn.right!=null) qu.add(tn.right);
54+
size--;
55+
}
56+
}
57+
return res;
58+
}
59+
}

‎code/lc206.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@ public class ListNode {
1515
}
1616

1717
public ListNode reverseList(ListNode head) {
18-
ListNode newHead = null; //头节点变成尾节点,最后要指向null
19-
while(head != null){
18+
ListNode pre = null; //头结点变尾节点,指向null
19+
while(head!=null){
2020
ListNode next = head.next;
21-
head.next = newHead;
22-
newHead = head;
21+
head.next = pre;
22+
pre = head;
2323
head = next;
2424
}
25-
return newHead;
25+
return pre;
2626
}
2727

2828
public ListNode reverseList2(ListNode head) { //递归
2929
return reverseListInt(head, null);
3030
}
31-
private ListNode reverseListInt(ListNode head, ListNode newHead) {
31+
private ListNode reverseListInt(ListNode head, ListNode pre) {
3232
if (head == null)
33-
return newHead;
33+
return pre;
3434
ListNode next = head.next;
35-
head.next = newHead;
35+
head.next = pre;
3636
return reverseListInt(next, head); //尾递归,操作已经完成,最后返回最后结果罢了
3737
}
3838
}

‎code/lc493.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package code;
2+
3+
import java.util.Arrays;
4+
5+
/*
6+
* 493. Reverse Pairs
7+
* 题意:逆序对
8+
* 难度:Hard
9+
* 分类:
10+
* 思路:归并排序的思路 或者 树相关的数据结构
11+
* 排序前先count
12+
* 负数怎么解决? 不用考虑,因为排序前先count
13+
* Tips:
14+
*/
15+
public class lc493 {
16+
public static void main(String[] args) {
17+
reversePairs(new int[]{1,3,2,3,1});
18+
System.out.println(res);
19+
}
20+
21+
static int res = 0;
22+
public static int reversePairs(int[] nums) {
23+
mergeSort(nums, 0, nums.length-1);
24+
return res;
25+
}
26+
27+
public static void mergeSort(int[] nums, int left, int right){
28+
if(left<right){
29+
int mid = (left + right)/2;
30+
mergeSort(nums, left, mid);
31+
mergeSort(nums, mid+1, right);
32+
merge(nums, left, mid, right);
33+
}
34+
}
35+
36+
public static void merge(int[] nums, int left, int mid, int right){
37+
//count elements
38+
int pos1 = left;
39+
int pos2 = mid+1;
40+
int count = 0;
41+
while(pos1<=mid){ //双指针 统计逆序对
42+
if(pos2>right||nums[pos1]<=(double)nums[pos2]*2) {
43+
pos1++;
44+
res+=count;
45+
}
46+
else{
47+
pos2++;
48+
count++;
49+
}
50+
}
51+
52+
Arrays.sort(nums, left, right + 1);
53+
54+
// int[] nums_copy = nums.clone(); //耗时,大样例过不了
55+
// pos1 = left; //注意pos1, pos2重新赋值
56+
// pos2 = mid+1;
57+
// int cur = left;
58+
// while( pos1<=mid && pos2<=right ){
59+
// if(nums_copy[pos1]<=nums_copy[pos2]){
60+
// nums[cur] = nums_copy[pos1];
61+
// pos1++;
62+
// cur++;
63+
// } else {
64+
// nums[cur] = nums_copy[pos2];
65+
// pos2++;
66+
// cur++;
67+
// }
68+
// }
69+
// while(pos1<=mid){
70+
// nums[cur] = nums_copy[pos1];
71+
// cur++;
72+
// pos1++;
73+
// }
74+
// while(pos2<=right){
75+
// nums[cur] = nums_copy[pos2];
76+
// cur++;
77+
// pos2++;
78+
// }
79+
}
80+
81+
82+
}

‎code/lc94.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,16 @@ public List<Integer> inorderTraversal(TreeNode root) {
3434
}
3535
return res;
3636
}
37+
38+
List<Integer> res = new ArrayList();
39+
public List<Integer> inorderTraversal2(TreeNode root) { //递归
40+
helper(root);
41+
return res;
42+
}
43+
public void helper(TreeNode root){
44+
if(root==null) return;
45+
helper(root.left);
46+
res.add(root.val);
47+
helper(root.right);
48+
}
3749
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /