Java 在排序数组X中搜索第一个索引i,以便X[i]>;=A.

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

我正在努力修改codaddict找到的代码来解决这个问题
这个问题的简单变体。有人有主意了吗?

你接受他的算法,并返回
高值
,而不是
-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)之一。语言没有什么关系,我特别想理解逻辑(如果它是一个令人尴尬的简单问题,又抱歉)。