06-02.寻找元素最左出现的位置

1.题目

对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置

代码

    public int getLeftIndex(int[] array, int num) {
        int length = array.length;
        int left = 0;
        int right = length - 1;
        int res = -1;
        if (array[left] > num || array[right] < num) {
            return res;
        }
        while (right >= left) {
            int mid = left + (right - left) / 2;
            if (array[mid] == num) {
                res = mid;
                right = mid - 1;
            } else if (array[mid] > num) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return res;
    }

2.题目

给定一个有序数组array,其中不含有重复元素,请找到满足array[i] = i条件的最左位置,如果所有位置上的数值都不满足,请返回-1

代码

    public int getLeftIndex(int[] array) {
        int n = array.length - 1;
        int left = 0;
        int right = n;
        int res = -1;
        if (array[left] > n) {
            return -1;
        }
        if (array[right] < 0) {
            return -1;
        }
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (array[mid] == mid) {
                res = mid;
                right = mid - 1;
            } else if (array[mid] > mid) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return res;
    }
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值