题目
我的思路
思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限。
官方题解有另一个思路,借助二分法。
每次我们选择数组的中间元素,如果当前中间元素是满足条件的答案,那么这个位置往后的元素我们都不再考虑,只要寻找左半部分是否有满足条件的答案即可。
否则我们需要查看左半部分是否有满足条件的答案,如果没有的话我们仍然需要在右半边寻找,使用的策略同上。
我的实现
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; } }; /* 思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限 */
拓展学习
jquery—— jQuery 是目前最流行的 JS 框架
Bootstrap的css
markdown编辑器与富文本编辑器优缺点比较--转载好文
MATLAB绘图设置--中坐标显示间隔以及范围设置
MATLAB绘图中参数导数的标注方法
MATLAB 读取和写出Excel文件的方法-单个以及自动循环读写多个情况
matlab 求和
MATLAB画图中设置Marker过于密集怎么办-解决方法
MPC特点原理以及各项参数的选择--引用别人的博客网址