Fork me on GitHub

【Offer】[53-3] 【数组中数值和下标相等的元素】

题目描述

  假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数,找出数组中任意一个数值等于其下标的元素。例如,在数组{-3,-1, 1,3,5}中,数字3和它的下标相等。

[牛客网刷题地址] 无

思路分析

还是二分查找的思路,如果比较mid和其对应下标的关系:

  1. 如果大于下标,则查找左边部分;
  2. 如果小于下标,则查找右边部分;
  3. 如果正好相等,返回该值;

测试用例

  1. 功能测试:数组中包含或者不包含数值和下标相等的元素。
  2. 边界值测试:数组中只有一个数字;数值和下标相等的元素位于数组的开头或者结尾。
  3. 特殊输入测试:表示数组的指针为nullptr指针。

Java代码

public class Offer053_03 {
    public static void main(String[] args) {
        test1();
        test2();
        test3();
        
    }

    public static int GetNumberSameAsIndex(int[] array) {
        return Solution1(array);
    }

    
    private static int Solution1(int[] array) {
        if(array==null || array.length<=0) {
            return -1;
        }
        int left = 0;
        int right = array.length-1;
        while(left<=right) {
            int mid = (left+right)>>1;
            if(array[mid]>mid) {
                right = mid-1;
            }else if(array[mid]<mid){
                left = mid+1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    private static void test1() {
        int[] array = {-3,-1, 1,3,5};
        System.out.println(GetNumberSameAsIndex(array));
    }

    private static void test2() {
        int[] array = {0,1,2,3,4,5};
        System.out.println(GetNumberSameAsIndex(array));
    }
    private static void test3() {
        int[] array = {0};
        System.out.println(GetNumberSameAsIndex(array));
    }
}

代码链接

剑指Offer代码-Java

posted @ 2019-08-27 21:58  这个世界~  阅读(121)  评论(0编辑  收藏  举报