首页 > 其他分享 >在arr上,返回arr中大于等于targetNum的最左的位置。

在arr上,返回arr中大于等于targetNum的最左的位置。

时间:2022-10-29 14:22:39浏览次数:44  
标签:arr targetNum int System test 大于 out

package class01;

import java.util.Arrays;

/**
 * 在arr上,返回arr中大于等于targetNum的最左的位置。
 * (如果有,就返回这个最左的索引。如果没有,可以返回-1。)
 * 使用了二分法。
 */
public class Code05_BSNearLeft {
    public static void main(String[] args) {
        int maxSize = 30;
        int maxValue = 50;
        int testTimes = 10000;
        boolean flag = true;
        for (int i = 0; i < testTimes; i++) {
            int[] arr = generateRandomArr(maxSize, maxValue);
            int[] arr2 = copyArr(arr);
            Arrays.sort(arr);
            int targetNum = (int) (Math.random() * maxValue);
            int resultNum = nearestIndex(arr, targetNum);
            int test = test(arr, targetNum);
            if (resultNum != test) {
                System.out.println("oops!");
                flag = isFlag(arr, arr2, targetNum, resultNum, test);
            }
        }
        //及时所有的测试都通过了,也打印一次数据,查看结果。
        int[] arr = generateRandomArr(maxSize, maxValue);
        int[] arr2 = copyArr(arr);
        Arrays.sort(arr);
        int targetNum = (int) (Math.random() * maxValue);
        int test = test(arr, targetNum);
        int resultNum = nearestIndex(arr, targetNum);
        isFlag(arr, arr2, targetNum, resultNum, test);//方法复用

        System.out.println(flag ? "nice!" : "oops!");
    }

    private static boolean isFlag(int[] arr, int[] arr2, int targetNum, int resultNum, int test) {
        System.out.println("================================================");
        boolean flag;
        flag = false;
        System.out.println("原数组:");
        printArr(arr2);//原数组
        System.out.println("升序数组:");
        printArr(arr);//升序数组
        for (int index = 0; index < arr.length; index++) {//打印索引,看着方便。
            System.out.print(index + "\t");
        }
        System.out.println();
        System.out.println("targetNum = " + targetNum);
        System.out.println("test = " + test);
        System.out.println("resultNum = " + resultNum);
        System.out.println("================================================");
        return flag;
    }

    //核心方法
    public static int nearestIndex(int[] arr, int num) {
        int L = 0;
        int R = arr.length - 1;
        int temp = -1;
        while (L <= R) {
            int mid = L + ((R - L) >> 1);
            if (arr[mid] >= num) {
                temp = mid;
                R = mid - 1;
            } else {
                L = mid + 1;
            }
        }
        return temp;
    }

    public static int[] generateRandomArr(int maxSize, int maxValue) {
        int[] arr = new int[(int) (Math.random() * maxSize)];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * maxValue) - (int) (Math.random() * maxValue);
        }
        return arr;
    }

    public static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }

    public static int test(int[] arr, int targetNum) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= targetNum) {
                return i;
            }
        }
        return -1;
    }

    public static int[] copyArr(int[] arr1) {
        int[] arr2 = new int[arr1.length];
        for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }
        return arr2;
    }
}

 

标签:arr,targetNum,int,System,test,大于,out
From: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16838647.html

相关文章

  • LeetCode 1248. Count Number of Nice Subarrays
    原题链接在这里:https://leetcode.com/problems/count-number-of-nice-subarrays/题目:Givenanarrayofintegers nums andaninteger k.Acontinuoussubarrayis......
  • ArrayList集合
    集合概述集合,长度可变的容器1ArrayList集合可变长度原理:ArrayList集合:底层原理也是,数组;初始大小长度为101初始化一个长度为10的数组,数值依次存储,当数组存不下的时候;2创建......
  • numpy(ndarray)和tensor(GPU上的numpy)速查
    类型(Types)NumpyPyTorchnp.ndarraytorch.Tensornp.float32torch.float32;torch.floatnp.float64torch.float64;torch.doublenp.floattorch.float1......
  • 【AGC010E】Rearranging(博弈,图论,拓扑排序)
    考场上想了很久才想到做法,然后考完后又想了很久,加上看了一下一些大佬的博客和Atcoder的官方题解,才完整地证明了整个做法的正确性。综合了一下,在这里详细阐述:首先发现如......
  • Leetcode第907题:子数组的最小值之和(Sum of subarrays minimums )
    解题思路既然我们不能先遍历区间,然后找最小值,那么我们不如顺序倒过来,对于每个值,我们找有多少区间里面,它是最小值。对于一个数字A[i]来说,如果在某个区间[j,k]里面它......
  • String 转Array&Array转String
    String转为List,根据分隔符分割示例:Stringsn="1234,567,8910";List<String>snList=Arrays.asList(sn.split(","));1234,567,8910#List转为String,插入分隔符......
  • CF1710E Two Arrays
    \(\text{Solution}\)一道有难度的博弈论,对于一个点最多走\(1000\)次其实是没有意义的,可以看成只走\(1\)次。考虑去二分答案\(mid\),那么对于原图就会变成很多个黑白点,那么......
  • HDU5869 Different GCD Subarray Query 离线查询/区间贡献
    题目思路首先,区间收敛到的时间是,那么用维护区间内不同数字的数目的思路解决。预处理所有右端点的集合枚举右端点,加入右端点集合的贡献;如果在加入某个值时发现之前出现过,那么......
  • string ArrayList 总结
    API:程序编程接口,方便调用string类:“”相同内容存储一份(减少浪费,共享)堆内存中的常量池中new出来的放在堆内存中      常用方法:equals等等(==判断......
  • [ARC070E] NarrowRectangles
    [ARC070E]NarrowRectangles首先考虑\(O(n^2)dp\),设\(dp_{i,j}\)表示前\(i\)个线段其右端点在\(j\)的最小代价,令\(len_i=R_i-L_i\)\[dp_{i,j}=|R_i-j|+Min_{k=j-len_i}......