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

简介: 在一个有序数组中,找<=某个数最右侧的位置
package com.harrison.Class01;
import java.util.Arrays;
public class Code06_BSNearRight {
  public static int nearestIndex(int[] arr,int value) {
    int l=0;
    int r=arr.length-1;
    int index=-1;
    while(l<=r) {
      int mid=l+((r-l)>>1);
      if(arr[mid]<=value) {
        index=mid;
        l=mid+1;
      }else {
        r=mid-1;
      }
    }
    return index;
  }
  //从右往左
  public static int test(int[] arr,int value) {
    for(int i=arr.length-1; i>=0; i--) {
      if(arr[i]<=value) {
        return i;
      }
    }
    return -1;
  }
  public static int[] generateRandomArray(int maxSize,int maxValue) {
    int[] arr=new int[(int)(Math.random()*(maxSize+1))];
    for(int i=0; i<arr.length; i++) {
      arr[i]=(int)(Math.random()*(maxValue+1))-(int)(Math.random()*maxValue);
    }
    return arr;
  }
  public static void printArray(int[] arr) {
    if(arr==null) {
      return ;
    }
    for(int i=0; i<arr.length; i++) {
      System.out.print(arr[i]+" ");
    }
    System.out.println();
  }
  public static void main(String[] args) {
    int testTimes=1000000;
    int maxSize=100;
    int maxValue=100;
    boolean succeed=true;
    for(int i=0; i<testTimes; i++) {
      int value=(int)(Math.random()*(maxValue+1))-(int)(Math.random()*maxValue);
      int[] arr=generateRandomArray(maxSize, maxValue);
      Arrays.sort(arr);
      if(nearestIndex(arr, value)!=test(arr, value)) {
        printArray(arr);
        System.out.println(value);
        System.out.println(nearestIndex(arr, value));
        System.out.println(test(arr, value));
        succeed=false;
        break;
      }
    }
    System.out.println(succeed?"Nice":"Fucking fucked");
  }
}
相关文章
【剑指offer】-调整数组顺序使奇数位于偶数前面-13/67
【剑指offer】-调整数组顺序使奇数位于偶数前面-13/67
|
10月前
|
搜索推荐 算法 测试技术
C++归并排序算法的应用:计算右侧小于当前元素的个数
C++归并排序算法的应用:计算右侧小于当前元素的个数
|
25天前
|
人工智能
依次后移一个位置
依次后移一个位置。
28 12
|
5月前
|
Python C++ Java
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
48 0
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
【二分查找】左侧边界、右侧边界、查找值
【二分查找】左侧边界、右侧边界、查找值
剑指offer_数组---调整数组顺序使奇数位于偶数前面
剑指offer_数组---调整数组顺序使奇数位于偶数前面
47 0
剑指offer 20. 调整数组顺序使奇数位于偶数前面
剑指offer 20. 调整数组顺序使奇数位于偶数前面
52 0
|
人工智能 搜索推荐 vr&ar
每日一题[LeetCode 315]计算右侧小于当前元素的个数
发现leetcode的困难难度做起来还是需要点时间的(还是我太菜了),而且可能大多数人也不能接受,所以明天开始穿插做中等难度题目。
力扣315计算右侧小于当前元素的个数
力扣315计算右侧小于当前元素的个数
87 0
每日三题-寻找两个正序数组的中位数 、搜索旋转排序数组、 在排序数组中查找元素的第一个和最后一个位置
每日三题-寻找两个正序数组的中位数 、搜索旋转排序数组、 在排序数组中查找元素的第一个和最后一个位置
56 2
每日三题-寻找两个正序数组的中位数 、搜索旋转排序数组、 在排序数组中查找元素的第一个和最后一个位置