mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Update
This commit is contained in:
@ -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)
|
||||||
|
|
||||||
## 哈希表
|
## 哈希表
|
||||||
|
@ -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)这篇文章先看了,在把「leetcode:35.搜索插入位置」做了之后在做这道题目就好很多了)
|
那么这里我采用while (left <= right)的写法,区间定义为[left, right],即左闭又闭的区间(如果这里有点看不懂了,强烈建议把[704.二分查找](https://mp.weixin.qq.com/s/4X-8VRgnYRGd5LYGZ33m4w)这篇文章先看了,704题目做了之后再做这道题目就好很多了)
|
||||||
|
|
||||||
确定好:计算出来的右边界是不包好target的右边界,左边界同理。
|
确定好:计算出来的右边界是不包好target的右边界,左边界同理。
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user