给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    该题目可以采用二分的思想,查找该元素。实现如下:

private static String find(int[] arr,int num) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right){
            if(num < arr[left]){   //未找到之应该插入到最开始位置
                return "无该元素,应该被插入到:"+0+"号位置";
            }
            if(num > arr[right]){   //未找到之应该插入到最后位置
                return "无该元素,应该被插入到:"+arr.length+"号位置";
            }

            int mid = (right - left + 1)/2 + left;
            if(arr[mid] == num){    //找到
                return "该元素下标为:"+mid;
            }else if(arr[mid] > num){
                right = mid - 1;
            }else {
                left = mid + 1;
            }
            if(arr[mid] < num && arr[mid+1] > num){   //未找到之应该插入到中间某个节点(不用判断mid的合法性,第一个判断,就不会让mid > arr.length -1).
                return "无该元素,应该被插入到:"+(mid+1)+"号位置";
            }
        }
        return null;
    }

测试如下:

 int[] arr = {1,3,5,8,11,35,69};
        System.out.println(find(arr,0));
        System.out.println(find(arr,5));
        System.out.println(find(arr,20));
        System.out.println(find(arr,73));

原文地址:https://www.cnblogs.com/128-cdy/p/12596139.html