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 4be6716

Browse files
Merge remote-tracking branch 'origin/master'
2 parents 027cc40 + facd6a7 commit 4be6716

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* [q54_螺旋矩阵](/src/数组操作/q54_螺旋矩阵)
5656
* [q73_矩阵置零](/src/数组操作/q73_矩阵置零)
5757
* [q78_子集](/src/数组操作/q78_子集)
58+
* [q384_打乱数组](/src/数组操作/q384_打乱数组)
5859
* [q581_最短无序连续子数组](/src/数组操作/q581_最短无序连续子数组)
5960
* [q945_使数组唯一的最小增量](/src/数组操作/q945_使数组唯一的最小增量)
6061

‎Rocket.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,8 @@ AQS有两个队列,同步对列和条件队列。同步队列依赖一个双
552552
3. SynchronousQueue:本身不带有空间来存储任何元素,使用上可以选择公平模式和非公平模式。
553553
4. PriorityBlockingQueue:无界队列,基于数组,数据结构为二叉堆,数组第一个也是树的根节点总是最小值。
554554

555+
举例 ArrayBlockingQueue 实现并发同步的原理:原理就是读操作和写操作都需要获取到 AQS 独占锁才能进行操作。如果队列为空,这个时候读操作的线程进入到读线程队列排队,等待写线程写入新的元素,然后唤醒读线程队列的第一个等待线程。如果队列已满,这个时候写操作的线程进入到写线程队列排队,等待读线程将队列元素移除腾出空间,然后唤醒写线程队列的第一个等待线程。
556+
555557
### 线程池的拒绝策略
556558

557559
1. ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package 数组操作.q384_打乱数组;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Random;
6+
7+
/**
8+
* 洗牌算法 o(n)
9+
*/
10+
public class Solution {
11+
private int[] array;
12+
private int[] original;
13+
14+
private Random rand = new Random();
15+
16+
private List<Integer> getArrayCopy() {
17+
List<Integer> asList = new ArrayList<>();
18+
for (int i = 0; i < array.length; i++) {
19+
asList.add(array[i]);
20+
}
21+
return asList;
22+
}
23+
24+
public Solution(int[] nums) {
25+
array = nums;
26+
original = nums.clone();
27+
}
28+
29+
public int[] reset() {
30+
array = original;
31+
original = original.clone();
32+
return array;
33+
}
34+
35+
public int[] shuffle() {
36+
List<Integer> aux = getArrayCopy();
37+
38+
for (int i = 0; i < array.length; i++) {
39+
int removeIdx = rand.nextInt(aux.size());
40+
array[i] = aux.get(removeIdx);
41+
aux.remove(removeIdx);
42+
}
43+
44+
return array;
45+
}
46+
}

0 commit comments

Comments
(0)

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