当前位置:网站首页>力扣704-二分查找
力扣704-二分查找
2022-08-02 11:41:00 【张怼怼√】
题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
解题思路
这是一道简单题,由于题目给定的是一个有序的数组,那么查找元素就可以采用二分查找的方法;
升序和降序只是在判断边界条件的时候有部分差异;
需要求出中间元素,可以直接写 int mid = (left + right) / 2;
但是这样写,当数组规模较大的时候容易造成整形数据溢出;
所以考虑采用位运算 int mid = left + ((right - left) >> 1);
采用的区间使用左右闭合区间 [left, right],个人认为这样更好理解。
输入输出示例
代码
class Solution {
public int search(int[] nums, int target) {
int n = nums.length;
if(target < nums[0] || target > nums[n - 1]) return -1;
int left = 0, right = n - 1;
while(left <= right){
//int mid = left + ((right - left) >> 1); // 这样写是为了防止超出整型数据溢出
int mid = (left + right) / 2;
if(target > nums[mid]){
left = mid + 1;
}else if(target < nums[mid]){
right = mid - 1;
}else return mid;
}
return -1;
}
}
边栏推荐
猜你喜欢
随机推荐
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
Swift中什么时候不能用 () 代替 Void 来使用
SQL 数据更新
Kotlin的协程与生命周期
如何在 UE4 中制作一扇自动开启的大门
ES2020-23简单易懂又实用的精选特性讲解 日常开发必备干货!
Shell编程案例
MP的几种查询方式
字母交换--字符串dp
网站自动翻译-网站批量自动翻译-网站免费翻译导出
中原银行实时风控体系建设实践
SQLAlchemy使用教程
ansible module --yum module
【Acunetix-Forgot your password】
jacoco的学习以及理解
ssm网页访问数据库数据报错
Excel动态图制作
Jest 测试框架 beforeEach 的设计原理解析
openresty 性能优化
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一