面试题 08.03:魔术索引

简介: 面试题 08.03:魔术索引

题目

题目链接

魔术索引。 在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。

示例1:

输入:nums = [0, 2, 3, 4, 5]
 输出:0
 说明: 0下标的元素为0

示例2:

输入:nums = [1, 1, 1]
 输出:1

解题

注意:题目中没有说明是非严格递增的,因此不能使用二分法。

方法一:顺序遍历

此方法比较暴力简单,但时间复杂度上并不是最优

class Solution {
public:
    int findMagicIndex(vector<int>& nums) {
        for(int i=0;i<nums.size();i++){
            if(nums[i]==i) return i;
        }
        return -1;
    }
};

方法二:二分递归

由于要返回第一个遇到的,nums[i]==i

因此,必须要leftRes==-1的时候才判断mid==nums[mid];

class Solution {
public:
    int helper(vector<int>& nums,int left,int right){
        if(left>right) return -1;
        int mid=(left+right)/2;
        int leftRes=helper(nums,left,mid-1);
        if(leftRes!=-1) return leftRes;
        else if(mid==nums[mid]) return mid;
        else return helper(nums,mid+1,right);
    }
    int findMagicIndex(vector<int>& nums) {
        return helper(nums,0,nums.size()-1);
    }
};

虽然本质和遍历没啥差别

相关文章
|
2月前
|
SQL 存储 关系型数据库
对线面试官 - 如何理解MySQL的索引覆盖和索引下推
索引下推是MySQL 5.6引入的优化,允许部分WHERE条件在索引中处理,减少回表次数。例如,对于索引(zipcode, lastname, firstname),查询`WHERE zipcode=&#39;95054&#39; AND lastname LIKE &#39;%etrunia%&#39;`时,索引下推先过滤zipcode,然后在索引中应用lastname条件,降低回表需求。索引下推可在EXPLAIN的`Using index condition`中看到。
对线面试官 - 如何理解MySQL的索引覆盖和索引下推
|
2月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
220 0
|
7月前
|
SQL 关系型数据库 MySQL
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
|
8月前
|
关系型数据库 MySQL 索引
【面试题精讲】MySQL中覆盖索引是什么
【面试题精讲】MySQL中覆盖索引是什么
|
5月前
|
存储 关系型数据库 MySQL
【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?
【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?
384 0
【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?
|
2月前
|
存储 SQL 关系型数据库
索引和事务究竟是何方神圣?那可是面试中的常客!
索引和事务究竟是何方神圣?那可是面试中的常客!
45 1
索引和事务究竟是何方神圣?那可是面试中的常客!
|
7月前
|
存储 关系型数据库 MySQL
Java 最常见的面试题:mysql 索引是怎么实现的?
Java 最常见的面试题:mysql 索引是怎么实现的?
|
8月前
|
关系型数据库 MySQL 数据库
python技术面试题(十四)--数据库索引
python技术面试题(十四)--数据库索引
|
3月前
|
存储 数据库 索引
面试题 16: 什么是数据库索引
面试题 16: 什么是数据库索引
面试题 16: 什么是数据库索引
|
4月前
|
SQL 关系型数据库 MySQL
面试题:mysql在项目里有没有用到索引,哪些字段用了,哪些字段为什么不用
面试题:mysql在项目里有没有用到索引,哪些字段用了,哪些字段为什么不用
24 0