原题链接:数列有序
解题思路:
使用双向指针 left right 记录 左右范围
如果left > right 查找结束
设置 m = (left + right) >>> 1 ,m为中间索引 (可更改为 m = left + right / 2, 使用无符号右移 避免数据过大超出int范围)
判断target值与左右指针的关系 如果此时m位置 小于 target 缩小right 反之 增大left 并返回 判断条件
直到left > right
注意事项:
数组必须为有序递增
参考代码:
public static int[] binarySearch(int[] a, int target){ //指针和初值 int left = 1, right = a.length; while (1 < right - left){ //j - i范围内待查找的范围个数 //在这里没有办法理解 >>>进位符的,可以使用:int middle = beginIndex + ((endIndex-beginIndex)/2); // >> 带符号右移 int m = (left+right) >>> 1; // int m = (i + j)/ 2;//获取中间索引 if (target < a[m]){ right = m; //小于中间值 } else { left = m; } } int tmp = a[0]; for (int i = 0; i < left; i++) { a[i] = a[i+1]; } a[left] = tmp; return a; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复