This commit is contained in:
youngyangyang04
2021-07-29 10:31:40 +08:00
parent b8b8865c69
commit 57eba785b0
3 changed files with 7 additions and 10 deletions

View File

@ -451,7 +451,6 @@
* [24.两两交换链表中的节点](./problems/0024.两两交换链表中的节点.md) * [24.两两交换链表中的节点](./problems/0024.两两交换链表中的节点.md)
* [234.回文链表](./problems/0234.回文链表.md) * [234.回文链表](./problems/0234.回文链表.md)
* [143.重排链表](./problems/0143.重排链表.md)【数组】【双向队列】【直接操作链表】 * [143.重排链表](./problems/0143.重排链表.md)【数组】【双向队列】【直接操作链表】
* [234.回文链表](./problems/0234.回文链表.md)
* [141.环形链表](./problems/0141.环形链表.md) * [141.环形链表](./problems/0141.环形链表.md)
## 哈希表 ## 哈希表

View File

@ -56,9 +56,9 @@
## 寻找右边界 ## 寻找右边界
先来寻找右边界,至于二分查找,如果看过[为什么每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q)就会知道二分查找中什么时候用while (left <= right)有什么时候用while (left < right)其实只要清楚**循环不变量**很容易区分两种写法 先来寻找右边界,至于二分查找,如果看过[704.二分查找](https://mp.weixin.qq.com/s/4X-8VRgnYRGd5LYGZ33m4w)就会知道二分查找中什么时候用while (left <= right)有什么时候用while (left < right)其实只要清楚**循环不变量**很容易区分两种写法
那么这里我采用while (left <= right)的写法区间定义为[left, right]即左闭又闭的区间如果这里有点看不懂了强烈建议把[为什么每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q)这篇文章先看了在把leetcode35.搜索插入位置做了之后做这道题目就好很多了 那么这里我采用while (left <= right)的写法区间定义为[left, right]即左闭又闭的区间如果这里有点看不懂了强烈建议把[704.二分查找](https://mp.weixin.qq.com/s/4X-8VRgnYRGd5LYGZ33m4w)这篇文章先看了704题目做了之后做这道题目就好很多了
确定好计算出来的右边界是不包好target的右边界左边界同理 确定好计算出来的右边界是不包好target的右边界左边界同理

View File

@ -44,7 +44,7 @@ int function1(int x, int n) {
那么就可以写出了如下这样的一个递归的算法,使用递归解决了这个问题。 那么就可以写出了如下这样的一个递归的算法,使用递归解决了这个问题。
``` ```C++
int function2(int x, int n) { int function2(int x, int n) {
if (n == 0) { if (n == 0) {
return 1; // return 1 同样是因为0次方是等于1的 return 1; // return 1 同样是因为0次方是等于1的
@ -62,7 +62,7 @@ int function2(int x, int n) {
这个时间复杂度就没有达到面试官的预期。于是又写出了如下的递归算法的代码: 这个时间复杂度就没有达到面试官的预期。于是又写出了如下的递归算法的代码:
``` ```C++
int function3(int x, int n) { int function3(int x, int n) {
if (n == 0) { if (n == 0) {
return 1; return 1;
@ -101,7 +101,7 @@ int function3(int x, int n) {
于是又写出如下递归算法的代码: 于是又写出如下递归算法的代码:
``` ```C++
int function4(int x, int n) { int function4(int x, int n) {
if (n == 0) { if (n == 0) {
return 1; return 1;
@ -132,7 +132,7 @@ int function4(int x, int n) {
对于function3 这样的递归实现很容易让人感觉这是O(logn)的时间复杂度其实这是O(n)的算法! 对于function3 这样的递归实现很容易让人感觉这是O(logn)的时间复杂度其实这是O(n)的算法!
``` ```C++
int function3(int x, int n) { int function3(int x, int n) {
if (n == 0) { if (n == 0) {
return 1; return 1;
@ -145,14 +145,12 @@ int function3(int x, int n) {
``` ```
可以看出这道题目非常简单,但是又很考究算法的功底,特别是对递归的理解,这也是我面试别人的时候用过的一道题,所以整个情景我才写的如此逼真,哈哈。 可以看出这道题目非常简单,但是又很考究算法的功底,特别是对递归的理解,这也是我面试别人的时候用过的一道题,所以整个情景我才写的如此逼真,哈哈。
大厂面试的时候最喜欢用“简单题”来考察候选人的算法功底,注意这里的“简单题”可并不一定真的简单哦! 大厂面试的时候最喜欢用“简单题”来考察候选人的算法功底,注意这里的“简单题”可并不一定真的简单哦!
如果认真读完本篇,相信大家对递归算法的有一个新的认识的,同一道题目,同样是递归,效率可是不一样的! 如果认真读完本篇,相信大家对递归算法的有一个新的认识的,同一道题目,同样是递归,效率可是不一样的!
----------------------- -----------------------
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
* B站视频[代码随想录](https://space.bilibili.com/525438321) * B站视频[代码随想录](https://space.bilibili.com/525438321)