Skip to content

Commit 6e7dea8

Browse files
committed
week 1
1 parent 0fd6bbe commit 6e7dea8

10 files changed

Lines changed: 156 additions & 1 deletion

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea

Week01/NOTE.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,19 @@
1-
学习笔记
1+
#第一周学习笔记
2+
3+
##PriorityQueue源码分析
4+
5+
###父类与接口
6+
PriorityQueue类(下称PQ)继承了AbstractQueue这一抽象类,因而具有Queue的所有方法;同时它也实现了Serializable这一接口,
7+
因而PQ对象可以被表示为字节序列存储或传输。
8+
9+
###底层逻辑结构与构造函数
10+
PQ的逻辑结构是一个通过数组实现的完全二叉树/堆。默认情况下PQ实现最小堆,但是可以通过传入一个comparator来实现自定义顺序存储。
11+
找节点的父节点和子节点可以通过以下索引:
12+
leftChild = 2 * index + 1;
13+
rightChild = 2 * index + 2;
14+
parent = (index - 1) / 2;
15+
16+
###时间复杂度
17+
添加和删除由于都需要在操作后调整二叉树中元素的排列来重新达到有序的状态,时间复杂度均为O(nlogn)(此为最坏情况下的时间复杂度,
18+
即插入的元素要从叶子节点sift up到根节点;或删除根节点后每一层的节点都需要sift up)。PQ的插入的平均时间复杂度也可以理解为
19+
O(1),因为只需要在堆的最后插入。
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public void rotate(int[] nums, int k) {
3+
int[] copy = new int[nums.length];
4+
for (int i = 0; i < nums.length; i++) {
5+
copy[(i + k) % nums.length] = nums[i];
6+
}
7+
for (int i = 0; i < nums.length; i++) {
8+
nums[i] = copy[i];
9+
}
10+
}
11+
}

Week01/problems/1_two-sum.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int[] twoSum(int[] nums, int target) {
3+
int[] res = new int[2];
4+
if (nums == null || nums.length < 2) {
5+
return res;
6+
}
7+
Map<Integer, Integer> map = new HashMap<>();
8+
for (int i = 0; i < nums.length; i++) {
9+
int complement = target - nums[i];
10+
if (map.containsKey(complement)) {
11+
res = new int[]{ map.get(complement), i };
12+
}
13+
map.put(nums[i], i);
14+
}
15+
return res;
16+
}
17+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
3+
if (l1 == null) {
4+
return l2;
5+
}
6+
if (l2 == null) {
7+
return l1;
8+
}
9+
ListNode dummy = new ListNode(0);
10+
ListNode head = dummy;
11+
while (l1 != null && l2 != null) {
12+
if (l1.val < l2.val) {
13+
dummy.next = l1;
14+
l1 = l1.next;
15+
} else {
16+
dummy.next = l2;
17+
l2 = l2.next;
18+
}
19+
dummy = dummy.next;
20+
}
21+
if (l1 != null) {
22+
dummy.next = l1;
23+
}
24+
if (l2 != null) {
25+
dummy.next = l2;
26+
}
27+
return head.next;
28+
}
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int removeDuplicates(int[] nums) {
3+
if (nums.length <= 1) {
4+
return nums.length;
5+
}
6+
int j = 1;
7+
for (int i = 1; i < nums.length; i++) {
8+
if (nums[i] != nums[i-1]) {
9+
nums[j++] = nums[i];
10+
}
11+
}
12+
return j;
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public void moveZeroes(int[] nums) {
3+
int nonZeroStart = 0;
4+
for (int i = 0; i < nums.length; i++) {
5+
if (nums[i] != 0) {
6+
swap(nums, i, nonZeroStart++);
7+
}
8+
}
9+
}
10+
private void swap(int[] nums, int i, int j) {
11+
int temp = nums[i];
12+
nums[i] = nums[j];
13+
nums[j] = temp;
14+
}
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int trap(int[] height) {
3+
int left = 0, right = height.length - 1, leftMax = 0, rightMax = 0, res = 0;
4+
while (left < right) {
5+
if (height[left] < height[right]) {
6+
leftMax = Math.max(leftMax, height[left]);
7+
res += leftMax - height[left];
8+
left++;
9+
} else {
10+
rightMax = Math.max(rightMax, height[right]);
11+
res += rightMax - height[right];
12+
right--;
13+
}
14+
}
15+
return res;
16+
}
17+
}

Week01/problems/66_plus-one.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int[] plusOne(int[] digits) {
3+
if (digits == null || digits.length == 0) {
4+
return digits;
5+
}
6+
for (int i = digits.length - 1; i >= 0; i--) {
7+
if (digits[i] < 9) {
8+
digits[i]++;
9+
return digits;
10+
} else {
11+
digits[i] = 0;
12+
}
13+
}
14+
int[] res = new int[digits.length + 1];
15+
res[0] = 1;
16+
return res;
17+
}
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public void merge(int[] nums1, int m, int[] nums2, int n) {
3+
int index1 = m - 1, index2 = n - 1, index3 = m + n - 1;
4+
while (index1 >= 0 && index2 >= 0) {
5+
if (nums1[index1] > nums2[index2]) {
6+
nums1[index3--] = nums1[index1--];
7+
} else {
8+
nums1[index3--] = nums2[index2--];
9+
}
10+
}
11+
while (index2 >= 0) {
12+
nums1[index3--] = nums2[index2--];
13+
}
14+
}
15+
}

0 commit comments

Comments
 (0)