查找有序数组插入位置
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 }

浙公网安备 33010602011771号