【算法】在一个有序数组中,找>=某个数最左侧的位置

2022/1/3 20:37:36

本文主要是介绍【算法】在一个有序数组中,找>=某个数最左侧的位置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目描述

在一个有序数组中,找>=某个数最左侧的位置

题解

用二分法的思想

public class BSLeft {
    
    public int findLeft(int[] arr,int x) {
        //数组为空或数组长度为0,返回-1
        if (arr == null || arr.length == 0) {
            return -1;
        }
        //调用二分搜索查找大于等于x最左侧的位置
        int result = bSLeft(arr,x,0,arr.length-1);
        //数组所有数都比x小,返回-1
        if (result > arr.length - 1) {
            return -1;
        }
        return result;
    }

    private int bSLeft(int[] arr,int x,int left,int right) {
        //当left > right时,若left合法,arr[left]>=x,arr[right]<x
        if (left > right) {
            return left;
        }
        //中间位置
        int mid = (left + right)/2;
        if (arr[mid] >= x) { //若中间位置的值大于等于x,继续在左半部分查找
            return bSLeft(arr,x,left,mid-1);
        } else { //若中间位置的值小于x,继续在右半部分查找
            return bSLeft(arr,x,mid+1,right);
        }
    }

    public static void main(String[] args) {
        //测试
        int[] arr = {1,1,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,8};
        System.out.println(new BSLeft().findLeft(arr, 3));
    }
}


这篇关于【算法】在一个有序数组中,找>=某个数最左侧的位置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程