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 f5f5f5a

Browse files
Update
1 parent b96175b commit f5f5f5a

File tree

7 files changed

+460
-8
lines changed

7 files changed

+460
-8
lines changed

‎problems/0027.移除元素.md‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
## 思路
3030

31+
[本题B站视频讲解](https://www.bilibili.com/video/BV12A4y1Z7LP)
32+
3133
有的同学可能说了,多余的元素,删掉不就得了。
3234

3335
**要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。**
@@ -75,10 +77,20 @@ public:
7577

7678
双指针法(快慢指针法): **通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。**
7779

80+
定义快慢指针
81+
82+
* 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
83+
* 慢指针:指向更新 新数组下标的位置
84+
85+
很多同学这道题目做的很懵,就是不理解 快慢指针究竟都是什么含义,所以一定要明确含义,后面的思路就更容易理解了。
86+
7887
删除过程如下:
7988

8089
![27.移除元素-双指针法](https://tva1.sinaimg.cn/large/008eGmZEly1gntrds6r59g30du09mnpd.gif)
8190

91+
很多同学不了解
92+
93+
8294
**双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。**
8395

8496
后序都会一一介绍到,本题代码如下:
@@ -104,8 +116,6 @@ public:
104116
* 时间复杂度:O(n)
105117
* 空间复杂度:O(1)
106118
107-
旧文链接:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html)
108-
109119
```CPP
110120
/**
111121
* 相向双指针方法,基于元素顺序可以改变的题目描述改变了元素相对位置,确保了移动最少元素

‎problems/0035.搜索插入位置.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ public:
7373
};
7474
```
7575
76-
* 时间复杂度:$O(n)$
77-
* 空间复杂度:$O(1)$
76+
* 时间复杂度:O(n)
77+
* 空间复杂度:O(1)
7878
7979
效率如下:
8080
@@ -135,14 +135,14 @@ public:
135135
// 目标值在数组所有元素之前 [0, -1]
136136
// 目标值等于数组中某一个元素 return middle;
137137
// 目标值插入数组中的位置 [left, right],return right + 1
138-
// 目标值在数组所有元素之后的情况 [left, right], return right + 1
138+
// 目标值在数组所有元素之后的情况 [left, right], 因为是右闭区间,所以 return right + 1
139139
return right + 1;
140140
}
141141
};
142142
```
143143

144-
* 时间复杂度:$O(\log n)$
145-
* 时间复杂度:$O(1)$
144+
* 时间复杂度:O(log n)
145+
* 时间复杂度:O(1)
146146

147147
效率如下:
148148
![35_搜索插入位置2](https://img-blog.csdnimg.cn/2020121623272877.png)
@@ -178,7 +178,7 @@ public:
178178
// 目标值在数组所有元素之前 [0,0)
179179
// 目标值等于数组中某一个元素 return middle
180180
// 目标值插入数组中的位置 [left, right) ,return right 即可
181-
// 目标值在数组所有元素之后的情况 [left, right),return right 即可
181+
// 目标值在数组所有元素之后的情况 [left, right),因为是右开区间,所以 return right
182182
return right;
183183
}
184184
};

‎problems/0704.二分查找.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636

3737
## 思路
3838

39+
为了易于大家理解,我还录制了视频,可以看这里:[手把手带你撕出正确的二分法](https://www.bilibili.com/video/BV1fA4y1o715)
40+
3941
**这道题目的前提是数组为有序数组**,同时题目还强调**数组中无重复元素**,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想是不是可以用二分法了。
4042

4143
二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。例如到底是 `while(left < right)` 还是 `while(left <= right)`,到底是`right = middle`呢,还是要`right = middle - 1`呢?

‎problems/0977.有序数组的平方.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
# 思路
2525

26+
为了易于大家理解,我还特意录制了视频,[本题视频讲解](https://www.bilibili.com/video/BV1QB4y1D7ep)
27+
2628
## 暴力排序
2729

2830
最直观的想法,莫过于:每个数平方之后,排个序,美滋滋,代码如下:

0 commit comments

Comments
(0)

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