剑指Offer--Java--数组中数值和下标相等的元素
发布日期:2021-05-04 06:37:22 浏览次数:33 分类:原创文章

本文共 608 字,大约阅读时间需要 2 分钟。

题目描述

假设一个单调递增的数组里的每个元素都是整数并且是唯一的。

请编程实现一个函数找出数组中任意一个数值等于其下标的元素。

例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等

样例描述

输入:[-3, -1, 1, 3, 5]输出:3注意:如果不存在,则返回-1。

思路

  1. 由于数组是递增数列,要查找的元素满足nums[i]==i,不难证明,nums[i]-i也是递增的,则此时相当于在新的递增数列中查找nums[i]-i==0的元素,所以考虑二分法
  2. 注意判断若最后二分的结果不为r,则说明不存在。

代码

class Solution {       public int getNumberSameAsIndex(int[] nums) {           int l=0,r=nums.length-1;         while(l<r){                 int mid=l+r>>1;              //大于0,则改变上限              if(nums[mid]-mid>=0)   r=mid;               else l=mid+1;         }         //判断是否相等         if(nums[r]-r==0) return r;         else return -1;    }}
上一篇:剑指Offer--Java--二叉搜索树的第k个结点
下一篇:剑指Offer--Java--0到n-1中缺失的数字

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月25日 16时52分01秒