查找有序数组插入位置

LeetCode的题,使用的常规的二分查找的,但效果居然不错,速度100%,内存38%,所以还是记录一下。

题目如下:

给定一个排序数组(升序)和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

输入: [1,3,5,6], 5
输出: 2
输入: [1,3,5,6], 2
输出: 1
输入: [1,3,5,6], 7
输出: 4
输入: [1,3,5,6], 0
输出: 0

我的思路就是使用常规的二分查找,具体代码如下:

 1     public int searchInsert(int[] shuRu, int muBiao) {
 2         // 特殊输入处理
 3         if(shuRu.length == 0) return 0;
 4         // 因为数组有序,使用二分查找查找目标位置 -- 升序
 5         int l = 0; // 左指针
 6         int r = shuRu.length - 1;    // 右指针
 7         int m = -1;                    // 中间指针
 8         boolean zhaoDao = false;    // 记录是否找到
 9         for(;l<=r;){
10             m = (l + r) / 2;     // 中间指针
11             // 判断修改指针
12             if(shuRu[m] > muBiao){
13                 r = m - 1;
14             }else if(shuRu[m] < muBiao){
15                 l = m + 1;
16             }else{
17                 // 两者相等,找到了
18                 zhaoDao = true;
19                 break;
20             }
21         }
22         if(zhaoDao){
23             return m;
24         }else{
25             // 没找到
26             if(shuRu[m]>muBiao)return m;
27             return m+1;
28         }
29     }

 

posted @ 2020-10-03 20:57  哦客源  阅读(269)  评论(0)    收藏  举报