领扣LintCode算法问题答案-14. 二分查找

本文详细解析了二分查找算法在查找有序整数数组中目标值的高效应用,通过实例和挑战题展示如何实现O(logn)时间复杂度。讨论了大数据下算法的适用性,并提供了Java代码实现和优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

领扣LintCode算法问题答案-14. 二分查找

14. 二分查找

描述

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。

样例 1:

输入:
	[1,4,4,5,7,7,8,9,9,10],1
输出: 
	0
样例解释: 
	第一次出现在第0个位置。

样例 2:

输入: 
	[1, 2, 3, 3, 4, 5, 10],3
输出: 
	2
样例解释: 
	第一次出现在第2个位置

样例 3:

输入: 
	[1, 2, 3, 3, 4, 5, 10],6
输出: 
	-1
样例解释: 
	没有出现过6, 返回-1

挑战

如果数组中的整数个数超过了232,你的算法是否会出错?

原题链接点这里

题解

public class Solution {
  
    /**
     * @param nums: The integer array.
	 * @param target: Target to find.
	 * @return: The first position of target. Position starts from 0.
	 */
	public int binarySearch(int[] nums, int target) {
		// write your code here
	    int n = nums.length;

		int low  = 0;
		int high = n - 1;
		int mid;

		while (low < high) {
			mid = (low + high) >>> 1;

			if (nums[mid] < target) {
				low = mid + 1;
			} else {
				high = mid;
			}
		}

		if (nums[high] == target) {
			return high;
		}

		return -1;
	}
}

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二当家的白帽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值