java 二分查找+对数器验证

package Code01;

import java.util.Arrays;

public class Solution {

//    arr有序 二分法 查找数组中是否存在num
    public static boolean find(int[] arr, int num){
//        对数组进行预判断
        if(arr==null || arr.length==0){
            return false;
        }

        int L = 0;
        int R = arr.length-1;

        while(L <= R){
            int mid = (L+R)/2;
            if(arr[mid] == num){
                return true;
            }
            else if(arr[mid] < num){
                L = mid +1;
            }
            else {
                R = mid-1;
            }
        }
        return false;
    }

//    找到大于等于num中最左的位置
    public static int mostLeftNoLessNumIndex(int[] arr, int num){
        if( arr==null || arr.length==0){
            return -1;
        }
        int ans = -1;
        int L =0;
        int R = arr.length-1;
        while(L<=R){
            int mid = (L+R)/2;
            if (arr[mid] >= num) {
                R = mid -1;
                ans = mid;
            }
            else if (arr[mid] < num) {
                L = mid+1;
            }
        }
        return ans;
    }

    public static boolean test(int[] sortedArr, int num){
        for(int cur : sortedArr){
            if(cur == num){
                return true;
            }
        }
        return false;
    }

    public static int[] generateRandomArray(int maxValue, int maxLen){
//        int len = (int)(Math.random()*maxLen);
//        int[] arr = new int[len];
        int[] arr = new int[((int)(Math.random()*(maxLen+1)))];
        for(int i=0;i<arr.length;i++){
//            arr数组可包含负数
            arr[i] = (int)(Math.random()*(maxValue+1) -(int)(Math.random()*maxValue));
        }
        return arr;
    }

    public static void main(String[] args){
        int maxLen = 50;
        int maxValue = 1000;
        int testTimes = 10000;

        for(int i=0;i<testTimes;i++){
            int[] arr = generateRandomArray(maxValue, maxLen);
            Arrays.sort(arr);
            int num = (int)(Math.random()*(maxValue+1)) - (int)(Math.random()*(maxValue));
            int ans = mostLeftNoLessNumIndex(arr, num);
            if( ans>=0){
                System.out.println("查找到目标数最左边的位置是:" + ans);
            }
            else {
                System.out.println("无法查找到目标数");
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值