题目
我的思路
思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限。
官方题解有另一个思路,借助二分法。
每次我们选择数组的中间元素,如果当前中间元素是满足条件的答案,那么这个位置往后的元素我们都不再考虑,只要寻找左半部分是否有满足条件的答案即可。
否则我们需要查看左半部分是否有满足条件的答案,如果没有的话我们仍然需要在右半边寻找,使用的策略同上。
我的实现
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; } }; /* 思路一是从小到大遍历有序序列,,当前元素如果小于它的下标并且下标那么继续遍历下一个元素;如果当前元素大于它的下标,那么可以直接跳到往后数第(当前元素-下标)个元素继续比较;直到匹配或者超出数组的界限 */
拓展学习
activiti基础一
sql中between包含边界值吗?
Mybatis遍历list,Array,map
元祖变成字符串 || 字符串中替换部分字符串 || enumberate可以找到字符串,列表,元祖的的索引和值 || zip的用法 || 判断变量的类型
py怎样建立模块和怎样导入模块
怎样判断变量是数组?
oracle中字符串连接用||
将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法
Bootstrap-table 相关参数