📜  门| GATE-CS-2006 |第 62 题(1)

📅  最后修改于: 2023-12-03 14:58:27.014000             🧑  作者: Mango

题目:GATE-CS-2006 第62题

题目描述:

本题要求实现一个函数,该函数使用二分查找算法在有序整数数组中查找给定值,并返回找到的元素的索引,若找不到则返回-1。要求算法的时间复杂度为O(logN)。

函数签名:
int binarySearch(int[] arr, int target)
输入输出示例:
int[] arr = {2, 4, 6, 8, 10};
int target = 4;

binarySearch(arr, target); // 输出: 1
解题思路:

二分查找是一种高效的查找算法,它利用数组的有序性将查找区间逐渐缩小。具体步骤如下:

  1. 初始化左右边界(left和right)为数组的起始和终止索引。
  2. 在每一次循环中,计算中间索引(middle)作为 left 和 right 的平均值。
  3. 检查中间元素是否等于目标值。若相等,则返回中间索引。
  4. 否则,若中间元素大于目标值,则目标值必然位于左半边,更新右边界(right)为中间索引减一。
  5. 否则,若中间元素小于目标值,则目标值必然位于右半边,更新左边界(left)为中间索引加一。
  6. 重复以上步骤,直到找到目标值或左右边界重合时,返回-1。
实现代码:
public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;
        
        while (left <= right) {
            int middle = left + (right - left) / 2;
            
            if (arr[middle] == target) {
                return middle;
            }
            
            if (arr[middle] > target) {
                right = middle - 1;
            } else {
                left = middle + 1;
            }
        }
        
        return -1;
    }
}

注意:以上代码是使用Java语言实现的二分查找算法。你可以根据需要使用其他编程语言来实现该算法。