另一个数组的数组子集降序二分查找。这是我的代码。它总是打印 "false"
Array subset of another array descending order binary search. Here's my code. It always prints "false"
这是我需要的布尔方法
public static boolean isSubsetOf(int a[], int b[]){
for (int i=0;i<b.length;i++){
if (binarySearch(a,0 ,a.length-1, b[i])==false) return false;
}
return true;
}
这是降序二分查找
private static boolean binarySearch(int[] a, int i, int j, int k) {
int mid;
if (i<=j){
mid=(i+j)/2;
if (a[mid]==k) return true;
else if (a[mid]<k) binarySearch(a, i,j=mid-1, k);
else binarySearch(a,i=mid+1,j,k);
}
return false;
}
}
您忽略了递归 binarySearch
调用的 return 值。
这是更正后的版本[请原谅不必要的样式清理]:
private static boolean
binarySearch(int[]a, int i, int j, int k)
{
int mid;
boolean match;
if (i <= j) {
mid = (i + j) / 2;
if (a[mid] == k)
return true;
if (a[mid] < k)
match = binarySearch(a, i, j = mid - 1, k));
else
match = binarySearch(a, i = mid + 1, j, k);
if (match)
return match;
}
return false;
}
但是,二分查找通常可以[更快]无需递归:
private static boolean
binarySearch(int[]a, int i, int j, int k)
{
int mid;
while (i <= j) {
mid = (i + j) / 2;
if (a[mid] == k)
return true;
if (a[mid] < k)
j = mid - 1;
else
i = mid + 1;
}
return false;
}
这是我需要的布尔方法
public static boolean isSubsetOf(int a[], int b[]){
for (int i=0;i<b.length;i++){
if (binarySearch(a,0 ,a.length-1, b[i])==false) return false;
}
return true;
}
这是降序二分查找
private static boolean binarySearch(int[] a, int i, int j, int k) {
int mid;
if (i<=j){
mid=(i+j)/2;
if (a[mid]==k) return true;
else if (a[mid]<k) binarySearch(a, i,j=mid-1, k);
else binarySearch(a,i=mid+1,j,k);
}
return false;
}
}
您忽略了递归 binarySearch
调用的 return 值。
这是更正后的版本[请原谅不必要的样式清理]:
private static boolean
binarySearch(int[]a, int i, int j, int k)
{
int mid;
boolean match;
if (i <= j) {
mid = (i + j) / 2;
if (a[mid] == k)
return true;
if (a[mid] < k)
match = binarySearch(a, i, j = mid - 1, k));
else
match = binarySearch(a, i = mid + 1, j, k);
if (match)
return match;
}
return false;
}
但是,二分查找通常可以[更快]无需递归:
private static boolean
binarySearch(int[]a, int i, int j, int k)
{
int mid;
while (i <= j) {
mid = (i + j) / 2;
if (a[mid] == k)
return true;
if (a[mid] < k)
j = mid - 1;
else
i = mid + 1;
}
return false;
}