题目
我的思路
思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限。
官方题解有另一个思路,借助二分法。
每次我们选择数组的中间元素,如果当前中间元素是满足条件的答案,那么这个位置往后的元素我们都不再考虑,只要寻找左半部分是否有满足条件的答案即可。
否则我们需要查看左半部分是否有满足条件的答案,如果没有的话我们仍然需要在右半边寻找,使用的策略同上。
我的实现
class Solution { public: int findMagicIndex(vector<int>& nums) { //哨兵 nums.push_back(nums.size()); int length = nums.size(); int index=0; while(nums[index]!=index){ if(nums[index]<index){ ++index; }else{ index=nums[index]; if(index>=nums.size()) break; } } if(index>=length)return -1; return index; } }; /* 思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限 */
拓展学习
apache:添加cgi模式
初识golang
Golang: pprof
Golang:测试map是否存在
beego: 获取request参数
shell:crontab
初识Iaas,paas
初识golang
Go-new和make