gpt4 book ai didi

java - 如何使用二进制搜索处理数组中的重复数字和两个或多个数字?

转载 作者:行者123 更新时间:2023-11-30 09:16:01 26 4
gpt4 key购买 nike

我写了一个二进制搜索算法,它工作正常,但当有重复项或数组中的两个或更多数字时它不能正常工作,它返回数组中找不到的值。我该怎么做才能解决这个问题,我是否需要在数组中搜索任何重复项来处理重复项?或者我可以阻止随机数生成器生成重复项吗?

代码如下:

public class BinarySearch {

static int RandomNum;
static int NumSize;
static int[] arr;
static int rangeOfNum;
static int LookFor;
static Random numGen = new Random();
static Scanner Input = new Scanner(System.in);
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Enter the size of the data set");
NumSize = Input.nextInt();
System.out.println("Enter the range of the random numbers");
rangeOfNum = Input.nextInt();
arr = new int[NumSize];
for (int i = 0; i <= NumSize-1; i++) {
RandomNum = numGen.nextInt(rangeOfNum);
arr[i] = RandomNum;
}
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++)
System.out.println("Number is: " + arr[i]);
System.out.println("Enter number you want to search for: ");
LookFor = Input.nextInt();
binarySearch(arr[0], arr.length-1, LookFor, arr);
}
//Binary Search Algorithm
public static int binarySearch(int LowIndex, int HighIndex, int Target, int[] array) {
if (LowIndex <= HighIndex) {
int MidIndex = (LowIndex + HighIndex)/2;
if (array[MidIndex] == Target){
System.out.println("Found target value at index " + MidIndex);
return Target;}
else if (array[MidIndex] > Target)
return binarySearch(LowIndex, MidIndex-1, Target, array);
else
return binarySearch(MidIndex+1, HighIndex, Target, array);
}
System.out.println("target value not found");
return -1;
}
}

感谢您的帮助。

最佳答案

第一次调用 binarySearch 时,按如下方式调用它:

binarySearch(arr[0], arr.length-1, LookFor, arr);

改成

binarySearch(0, arr.length-1, LookFor, arr);

关于java - 如何使用二进制搜索处理数组中的重复数字和两个或多个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com