Skip to content

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

+1-1
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

+1
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

+59
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

+8-8
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

+82
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

+12
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)