📌  相关文章
📜  C++ 的lower_bound() 方法的Java等效项(1)

📅  最后修改于: 2023-12-03 15:29:52.894000             🧑  作者: Mango

C++ 的lower_bound() 方法的Java等效项

在C++中,有一个非常常用的方法 lower_bound(),它用于在已排序的数组中查找第一个大于等于给定值的元素。在Java中,也有类似的方法 Collections.binarySearch(),可以达到同样的效果。

使用方法
C++ lower_bound()

在C++中,lower_bound() 方法定义在 algorithm 头文件中,可以直接使用。以下是使用示例:

#include <algorithm>
#include <iostream>

int main() {
  int arr[] = {1, 2, 3, 3, 3, 4, 5};
  int n = sizeof(arr) / sizeof(arr[0]);

  int x = 3;
  int* it = std::lower_bound(arr, arr + n, x);

  if (it != arr + n) {
    std::cout << "First element not less than " << x << " is " << *it << std::endl;
  } else {
    std::cout << "No such element!" << std::endl;
  }

  return 0;
}

上述代码输出:

First element not less than 3 is 3
Java Collections.binarySearch()

在Java中,Collections.binarySearch() 方法定义在 java.util.Collections 类中。使用前需要先将数组排序,然后再调用该方法进行查找。以下是使用示例:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer> arrList = Arrays.asList(1, 2, 3, 3, 3, 4, 5);
    Collections.sort(arrList);
    int n = arrList.size();

    int x = 3;
    int index = Collections.binarySearch(arrList, x);

    if (index >= 0) {
      System.out.println("First element not less than " + x + " is " + arrList.get(index));
    } else {
      System.out.println("No such element!");
    }
  }
}

上述代码输出:

First element not less than 3 is 3
时间复杂度分析

在C++中,lower_bound() 的时间复杂度为 $O(\log n)$,其中 $n$ 是数组大小。

在Java中,Collections.binarySearch() 的时间复杂度为 $O(\log n)$,其中 $n$ 是数组大小。

结论

在已排序的数组中查找第一个大于等于给定值的元素是很常见的操作,C++中的 lower_bound() 方法和Java中的 Collections.binarySearch() 方法都能完成这个功能。调用方法和时间复杂度上有些许不同,但实现的效果是相同的。可以根据具体情况选择使用其中的一个进行操作。