1064. 不动点
![题目描述](https://i-blog.csdnimg.cn/blog_migrate/feeb841ce665234bc29e649579c0bf58.png)
今天是失败的一天…
记录一下 有些东西是不可以用递归的
我看了一下网上题解 这道题真的有很多错误的
mid>A[mid] 和 mid<A[mid] 什么都说明不了 不能缩小fixedPoint
(因为有负数啦)
举例说明:
1.[0,1,2,3,4,5]
2.[-1,0,1,2,4,9,10] mid>A[mid] fixedPoint=4
3.[-1,0,2,3,7,9,10] mid<A[mid] fixedPoint=2
唯一能缩小范围的思路(也就是我的递归思路)如下
mid == A[mid] 只需要找[left,mid]就好
mid != A[mid] 按次序继续找[left,mid],[mid,rigth]
思路是完全正确的 但是递归有个问题在mid != A[mid]发生了
执行第二行findpoint的时候发现mid的数值在经历第一次递归的时候已经发生了改变。
QAQ我想了半天也没想出来什么高效解决的办法。(暴力不香吗哼…
贴一下我写的垃圾错误代码…
class Solution {
public:
int fixedPoint(vector<int>& A) {
int left=0,right=A.size()-1; //i是当前最小的A[i]=i
return findpoint(left,right,A);
}
int findpoint(int left,int right,vector<int>& A)
{
int mid=(left+right)/2;
if( (mid==A[mid]) && mid){
findpoint(left,mid,A);
if(!findpoint(left,mid,A)) return mid;
}
else{
if((!mid)&&(right==left)) return -1;
findpoint(left,mid,A);
findpoint(mid,right,A);
}
return -1;
}
};