由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请帮我看看这个java method? 一直不正常运行
相关主题
我这样把一个2D array 的每个column的数据导入到1D array的方法对不对?在C/Fortran之间传递2维数组
请教改numpy array的dtype谁给解释一下这个c question
C# 的不定长度的ARRAY?用数组做参数,在函数内部如何知道数组的size?
关于在rotated sorted array中查找的问题腆着脸在问一道
JHQ的一道指针题。mysql index优化求助
如何将若干已升序排序好的数组合并在一起,并仍然是升序?问个html和c++编程的问题
再问一个数据结构问题也问个二维数组的函数传递问题
问个面试题目int *a [] 和int (*a)[] 一样吗
相关话题的讨论汇总
话题: int话题: column话题: array话题: mid话题: query
进入Programming版参与讨论
1 (共1页)
h******o
发帖数: 334
1
一个只是column sorted的2D array,用binary search查找一个element出现的次数。
多谢帮助!
public static int count(int[][] array, int query) {

int searchTotal = 0;
for (int c=0; c < array.length; c++){
searchTotal += biSearch(array, query, c);
}

return searchTotal;

}
private static int biSearch(int[][] array, int query, int row) {
// create a 1D array to hold the entries of 2D array's column
int[] column = new int[array.length];
int count =0;
int low = 0;
int high = column.length - 1;
// put 2D array's column into 1D array
for (int i = 0; i < array.length; i++)
column[i] = array[i][row];
// binary search on column array
while (low <= high) {
int mid = low + (high - low) / 2;
if (column[mid] > query){
high = mid - 1;
}
else if (column[mid] < query){
low = mid + 1;
}
else if (column[mid] == query) {
count++;
int left = -1;
int right = 1;

while ((mid + left) >= 0) {
if (column[mid + left] == query) {
left--;
count++;
}
}

while ((mid + right) <= (column.length - 1)) {
if (column[mid + right] == query) {
right++;
count++;
}
}
//return count;
}

}

return count;
}
s********r
发帖数: 394
2
程序写的很糟糕,biSearch应该只完成数组的搜索,传入数组为什么搞成二维的?

★ 发自iPhone App: ChineseWeb 8.7

【在 h******o 的大作中提到】
: 一个只是column sorted的2D array,用binary search查找一个element出现的次数。
: 多谢帮助!
: public static int count(int[][] array, int query) {
:
: int searchTotal = 0;
: for (int c=0; c < array.length; c++){
: searchTotal += biSearch(array, query, c);
: }
:
: return searchTotal;

w***g
发帖数: 5958
3
错的地方好几个。第一个colum/row不分。最外层c的循环应该是到array[0].length而不
是array.length
biSearch这种程序需要背一个标准的。检测到相等时处理就完全混乱了。
正确的做法:检测到相等把low置为mid(或者把high置为mid),并且接着找,直到low和
high相等为止。最后low = high就是第一个>=query的数(或者第一个<=query的数)。然
后线性往一个方向找。

【在 h******o 的大作中提到】
: 一个只是column sorted的2D array,用binary search查找一个element出现的次数。
: 多谢帮助!
: public static int count(int[][] array, int query) {
:
: int searchTotal = 0;
: for (int c=0; c < array.length; c++){
: searchTotal += biSearch(array, query, c);
: }
:
: return searchTotal;

h******o
发帖数: 334
4
多谢回复! 我的想法是把二维数组的column的elements导入到一维数组,然后binary
search这个一维数组,不知这样的转换是否可行?

【在 s********r 的大作中提到】
: 程序写的很糟糕,biSearch应该只完成数组的搜索,传入数组为什么搞成二维的?
:
: ★ 发自iPhone App: ChineseWeb 8.7

h******o
发帖数: 334
5
非常感谢! 我再想想你说的怎么实现。。。

而不
low和
。然

【在 w***g 的大作中提到】
: 错的地方好几个。第一个colum/row不分。最外层c的循环应该是到array[0].length而不
: 是array.length
: biSearch这种程序需要背一个标准的。检测到相等时处理就完全混乱了。
: 正确的做法:检测到相等把low置为mid(或者把high置为mid),并且接着找,直到low和
: high相等为止。最后low = high就是第一个>=query的数(或者第一个<=query的数)。然
: 后线性往一个方向找。

1 (共1页)
进入Programming版参与讨论
相关主题
int *a [] 和int (*a)[] 一样吗JHQ的一道指针题。
一道很奇怪的面试题如何将若干已升序排序好的数组合并在一起,并仍然是升序?
新手学JAVA,遇到一个难题,有大侠愿意帮忙吗?再问一个数据结构问题
求助:关于2个python的题目问个面试题目
我这样把一个2D array 的每个column的数据导入到1D array的方法对不对?在C/Fortran之间传递2维数组
请教改numpy array的dtype谁给解释一下这个c question
C# 的不定长度的ARRAY?用数组做参数,在函数内部如何知道数组的size?
关于在rotated sorted array中查找的问题腆着脸在问一道
相关话题的讨论汇总
话题: int话题: column话题: array话题: mid话题: query