auto commit
This commit is contained in:
parent
85fd95bf22
commit
5f16f649bf
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
**题目描述**
|
**题目描述**
|
||||||
|
|
||||||
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是第一个重复的数字 2。
|
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是第一个重复的数字 2。
|
||||||
|
|
||||||
**解题思路**
|
**解题思路**
|
||||||
|
|
||||||
@ -95,6 +95,7 @@
|
|||||||
|
|
||||||
```java
|
```java
|
||||||
public boolean duplicate(int numbers[], int length, int[] duplication) {
|
public boolean duplicate(int numbers[], int length, int[] duplication) {
|
||||||
|
if(numbers == null || length <= 0) return false;
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
while (numbers[i] != i && numbers[i] != numbers[numbers[i]]) {
|
while (numbers[i] != i && numbers[i] != numbers[numbers[i]]) {
|
||||||
swap(numbers, i, numbers[i]);
|
swap(numbers, i, numbers[i]);
|
||||||
@ -120,6 +121,10 @@ private void swap(int[] numbers, int i, int j) {
|
|||||||
|
|
||||||
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
|
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
|
||||||
|
|
||||||
|
**解题思路**
|
||||||
|
|
||||||
|
从右上角开始查找。因为矩阵中的一个数,它左边的数都比它来的小,下面的数都比它来的大。因此,从右上角开始查找,就可以 target 和当前元素的大小关系来改变行和列的下标,从而缩小查找区间。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public boolean Find(int target, int [][] array) {
|
public boolean Find(int target, int [][] array) {
|
||||||
if (array == null || array.length == 0 || array[0].length == 0) return false;
|
if (array == null || array.length == 0 || array[0].length == 0) return false;
|
||||||
@ -169,7 +174,7 @@ public String replaceSpace(StringBuffer str) {
|
|||||||
|
|
||||||
## 6. 从尾到头打印链表
|
## 6. 从尾到头打印链表
|
||||||
|
|
||||||
正向遍历然后调用 Collections.reverse().
|
正向遍历然后调用 Collections.reverse()。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
|
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
|
||||||
|
@ -156,13 +156,13 @@
|
|||||||
|
|
||||||
### 3. 区别
|
### 3. 区别
|
||||||
|
|
||||||
- **拥有资源**:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问率属进程的资源。
|
- 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问率属进程的资源。
|
||||||
|
|
||||||
- **调度**:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
|
- 调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
|
||||||
|
|
||||||
- **系统开销**:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设置少量寄存器内容,开销很小。
|
- 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设置少量寄存器内容,开销很小。
|
||||||
|
|
||||||
- **通信方面**:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读/写同一进程中的数据段(如全局变量)来进行通信。
|
- 通信方面:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读/写同一进程中的数据段(如全局变量)来进行通信。
|
||||||
|
|
||||||
举例:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。
|
举例:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user