Skip to content

Commit 5f43ae1

Browse files
committed
作业:LeetCode第26题·删除排序数组中的重复项,第189题·旋转数组,以及第一周总结
1 parent 0fd6bbe commit 5f43ae1

3 files changed

Lines changed: 120 additions & 1 deletion

File tree

Week01/NOTE.md

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,72 @@
1-
学习笔记
1+
学习笔记
2+
3+
1.用 add first 或 add last 这套新的 API 改写 Deque 的代码
4+
5+
```java
6+
Deque<String> deque = new LinkedList<String> ()
7+
8+
deque.addFirst("a");
9+
deque.addLast("b");
10+
deque.addLast("c");
11+
System.out.println(deque);
12+
13+
String str = deque.peekFirst();
14+
System.out.println(str);
15+
System.out.println(deque);
16+
17+
while( deque.size() > 0 ) {
18+
System.out.println(deque.removeFirst());
19+
}
20+
System.out.println(deque);
21+
```
22+
23+
24+
25+
2.分析 Queue 和 Priority Queue 的源码
26+
27+
> 1.Queue, 队列,特点是数据先进先出,而PriorityQueue,优先级队列,使用上跟普通队列一样,唯一区别是PriorityQueue会根据排序规则决定谁在队头,谁在队尾。
28+
>
29+
>
30+
>
31+
> 2.Queue接口方法声明如下:
32+
>
33+
> | 方法 | 说明 |
34+
> | ------------------ | ------------------------------------------------------------ |
35+
> | boolean add(E e) | 在队列头部增加一个元素,如果容量已满,则抛出异常,成功则返回true |
36+
> | boolean offer(E e) | 在队列头部增加一个元素,如果容量已满,则返回false,成功加入,返回true; |
37+
> | E remove(); | 将队列头部元素移出队列并返回,如果队列为空,则抛出异常。 |
38+
> | E poll(); | 将队列头部元素移出队列并返回,如果队列为空,返回null |
39+
> | E element(); | 返回队列头部节点,但不移除队列头节点,如果队列为空,则抛出异常。 |
40+
> | E peek(); | 返回队列头部节点,但不移除队列头节点,如果队列为空,返回null。 |
41+
>
42+
> 优先级队列 PriorityQueue 类 实现了 Queue接口,但由于操作元素的规则不同,PriorityQueue有自己的 add() /offer() /remove() 等实现。
43+
>
44+
> 其元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。
45+
>
46+
> 方法:
47+
>
48+
> ```java
49+
> Comparator<? super E> comparator()
50+
> ```
51+
>
52+
> 返回排序用的Comparator,如果是自然顺序排序,则返回null
53+
>
54+
> PriorityQueue 队列的头,指排序规则最小元素。如果多个元素都是最小值则随机选一个。
55+
>
56+
>
57+
>
58+
> 3.PriorityQueue的实现,使用了最小堆,底层用数组存储:object[]数组
59+
>
60+
>
61+
62+
63+
64+
第一周学习数组链表,栈和队列,熟悉掌握各个数据结构查询以及修改的时间复杂度;
65+
66+
在应用到解决问题过程中,有如下收获
67+
68+
一种解决方法:左右夹逼法
69+
70+
一种思考方式:寻找最近重复子问题
71+
72+
一种加速思想:空间换时间,低维升高维
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* @lc app=leetcode.cn id=26 lang=java
3+
*
4+
* [26] 删除排序数组中的重复项
5+
*/
6+
7+
// @lc code=start
8+
class RemoveDuplicatesInSortedArray {
9+
public int removeDuplicates(int[] nums) {
10+
if(nums == null || nums.length == 0) return 0;
11+
int p = 0;
12+
int q = 1;
13+
while(q < nums.length){
14+
if(nums[p] != nums[q]){
15+
nums[++p] = nums[q];
16+
}
17+
q++;
18+
}
19+
return p + 1;
20+
}
21+
}
22+
// @lc code=end

Week01/RotatedArray.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* @lc app=leetcode.cn id=189 lang=java
3+
*
4+
* [189] 旋转数组
5+
*/
6+
7+
// @lc code=start
8+
class RotatedArray {
9+
public void rotate(int[] nums, int k) {
10+
k %= nums.length;
11+
reverse(nums, 0, nums.length - 1);
12+
reverse(nums, 0, k - 1);
13+
reverse(nums, k, nums.length - 1);
14+
}
15+
public void reverse(int[] nums, int start, int end) {
16+
while (start < end) {
17+
int temp = nums[start];
18+
nums[start] = nums[end];
19+
nums[end] = temp;
20+
start++;
21+
end--;
22+
}
23+
}
24+
}
25+
// @lc code=end
26+

0 commit comments

Comments
 (0)