Java 在排序数组X中搜索第一个索引i,以便X[i]>;=A.
我正在努力修改codaddict找到的代码来解决这个问题Java 在排序数组X中搜索第一个索引i,以便X[i]>;=A.,java,c++,algorithm,language-agnostic,Java,C++,Algorithm,Language Agnostic,我正在努力修改codaddict找到的代码来解决这个问题 这个问题的简单变体。有人有主意了吗?你接受他的算法,并返回高值,而不是-1。如果X[high]小于您的目标,则取而代之的是下一项。如果high等于数组大小,则不存在此类索引 迈克尔·安德森(Michael Anderson)关于你所指的算法是如何编写的是正确的,但它很容易适应 int find_hi (const std::vector<int> &X, int t) { int low = 0; int
这个问题的简单变体。有人有主意了吗?你接受他的算法,并返回
高值
,而不是-1
。如果X[high]
小于您的目标,则取而代之的是下一项。如果high
等于数组大小,则不存在此类索引
迈克尔·安德森(Michael Anderson)关于你所指的算法是如何编写的是正确的,但它很容易适应
int find_hi (const std::vector<int> &X, int t) {
int low = 0;
int high = X.size() - 1;
while(low <= high) {
int mid = (low + high) / 2;
if(X[mid] == t) return mid;
else if(X[mid] < t)
low = mid + 1;
else
high = mid - 1;
}
if (high < sz && X[high] < t) ++high;
return high;
}
int find_hi(const std::vector&X,int t){
int低=0;
int高=X.size()-1;
while(low您采用他的算法,并返回high
而不是-1
。如果X[high]
小于您的目标,则采用下一项。如果high
等于您的数组大小,则没有此类索引
迈克尔·安德森(Michael Anderson)关于你所指的算法是如何编写的是正确的,但它很容易适应
int find_hi (const std::vector<int> &X, int t) {
int low = 0;
int high = X.size() - 1;
while(low <= high) {
int mid = (low + high) / 2;
if(X[mid] == t) return mid;
else if(X[mid] < t)
low = mid + 1;
else
high = mid - 1;
}
if (high < sz && X[high] < t) ++high;
return high;
}
int find_hi(const std::vector&X,int t){
int低=0;
int高=X.size()-1;
而(低这是一种采用
#包括
#包括
int-arr[9]={0,1,2,3,4,5,7,7,8};
/*int*数组-要搜索的位置
int numberOfElements—数组中的元素数
int targetValue-我们正在寻找的值
*/
int find(int*数组、int numberOfElements、int targetValue)
{
//我们从搜索整个数组开始(这是我们的“范围”)。
int左=0;
int right=numberOfElements;
while(左<右)
{
//我们取“范围”的中间项,并将其与目标值进行比较。
int mid=(左+右)/2;
if(array[mid]>=targetValue)//如果我们击中了
{
//我们检查它是否是符合我们标准的第一项。
if(数组[mid-1]targetValue)
右=中;
其他的
左=中;
}
}
int main()
{
std::cout这是对
#包括
#包括
int-arr[9]={0,1,2,3,4,5,7,7,8};
/*int*数组-要搜索的位置
int numberOfElements—数组中的元素数
int targetValue-我们正在寻找的值
*/
int find(int*数组、int numberOfElements、int targetValue)
{
//我们从搜索整个数组开始(这是我们的“范围”)。
int左=0;
int right=numberOfElements;
while(左<右)
{
//我们取“范围”的中间项,并将其与目标值进行比较。
int mid=(左+右)/2;
if(array[mid]>=targetValue)//如果我们击中了
{
//我们检查它是否是符合我们标准的第一项。
if(数组[mid-1]targetValue)
右=中;
其他的
左=中;
}
}
int main()
{
std::cout要查找第一个索引i
,其中X[i]>=a
您需要像这样修改结束条件,以检查它是否确实是满足条件的第一个索引:
public int findIndex(int[] array, int target) {
int left = 0;
int right = array.length;
while (left < right) {
int mid = (left + right) / 2;
if (array[mid] >= target && (mid == 0 || array[mid - 1] < target)) {
return mid;
} else if (array[mid] > target) {
right = mid;
} else
left = mid;
}
return -1;
}
public int findIndex(int[]数组,int目标){
int左=0;
int right=array.length;
while(左<右){
int mid=(左+右)/2;
if(数组[mid]>=target&(mid==0 | |数组[mid-1]目标){
右=中;
}否则
左=中;
}
返回-1;
}
要查找第一个索引i
,其中X[i]>=a
您需要像这样修改结束条件,以检查它是否确实是满足条件的第一个索引:
public int findIndex(int[] array, int target) {
int left = 0;
int right = array.length;
while (left < right) {
int mid = (left + right) / 2;
if (array[mid] >= target && (mid == 0 || array[mid - 1] < target)) {
return mid;
} else if (array[mid] > target) {
right = mid;
} else
left = mid;
}
return -1;
}
public int findIndex(int[]数组,int目标){
int左=0;
int right=array.length;
while(左<右){
int mid=(左+右)/2;
if(数组[mid]>=target&(mid==0 | |数组[mid-1]目标){
右=中;
}否则
左=中;
}
返回-1;
}
<代码>或是什么?我们应该发布代码吗?或者我不是计算机科学家,但是你如何修改CODAIDET的代码(也许是标准步骤)。我是说,如果x(中)=0=0,我就不能改变(如果X(中)-MID>0),否则算法总是返回MID:(你想要用什么语言?C++)(或者最终是JAVA\R\matlab中的任何一种)。语言并不重要,我特别想了解逻辑(如果这是一个令人尴尬的简单问题,我再次抱歉)你在挣扎什么?我们应该发布代码还是?我不是计算机科学家,但如何修改codaddict的代码(可能是一个标准步骤)我的意思是,如果x(中间)=0=0,我不能改变(如果x(中间)-MID>0),否则算法总是返回MID:(你想要什么语言?C++(或者最终是java \r\Matlab)之一。语言没有什么关系,我特别想理解逻辑(如果它是一个令人尴尬的简单问题,又抱歉)。