package Code01;
import java.util.Arrays;
public class CodePractice {
// 二分 查找大于等于num最左的位置
public static int leftMaxIndex(int[] arr, int num){
int maxLeftIndex = -1;
if(arr == null || arr.length==0){
return maxLeftIndex;
}
int L = 0;
int R = arr.length -1;
while (L <= R) {
int mid = (R+L)/2;
if(arr[mid] >= num){
R = mid-1;
maxLeftIndex = mid;
}
else{
L = mid+1;
}
}
return maxLeftIndex;
}
// 暴力验证
public static int violence(int[] arr, int num){
int leftIndex = -1;
if(arr==null || arr.length==0){
leftIndex = -1;
}
for(int i=0;i<arr.length;i++){
if(arr[i] >= num){
leftIndex = i;
break;
}
}
return leftIndex;
}
// 生成随机数组且相邻数不相等
public static int[] randomArray(int maxLen, int maxValue){
int len = (int)(Math.random()*maxLen);
int[] arr = new int[len];
if(len > 0){
arr[0] = (int)(Math.random()*maxValue);
for(int i=1;i<len;i++){
do{
arr[i] = (int)(Math.random()*maxValue);
}while (arr[i] == arr[i-1]);
}
}
return arr;
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args){
int maxLen = 50;
int maxValue = 200;
int testTimes = 10000;
System.out.println("测试开始");
for(int i=0;i<testTimes;i++){
int[] arr = randomArray(maxLen, maxValue);
Arrays.sort(arr);
int num = (int)(Math.random()*maxValue);
if(violence(arr, num) == leftMaxIndex(arr, num)){
System.out.println("目标数:"+num);
System.out.println("暴力:" + violence(arr, num));
System.out.println("二分:" + leftMaxIndex(arr, num));
print(arr);
}
}
System.out.println("测试结束");
}
}
java 找到小于等于num的最左边的位置 二分
最新推荐文章于 2024-06-14 15:02:13 发布