查找数组中所有目标数值

问题

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].

思路

简单的二分查找,由于有相同的元素,需要后面加了几个把附近的找出来。
ps:之前在公司项目也这样找过一次,不过要先排序再查找。

代码(越写越觉得不对劲,写的太冗余了,勉强ac)

class Solution {
    public int[] searchRange(int[] nums, int target) {
        //升序 找到起始的位置;原始的二分查找,再找旁边的几个。
        int[] find = new int[2];
        find[0]=-1;find[1]=-1;
        if(nums.length==0)
            return find;
        int result =binarySearch(0,nums.length-1,nums,target);
        if(result == -1)
            return find;
        else
           return findNearBy(result,target,nums);
            
            
    }
    public int binarySearch(int start,int end,int[] nums,int target){
        if(start>end){
            return -1;
        }
        int mid = (start+end)/2;
        if(nums[mid] == target){
            return mid;
        }
        if(target>nums[mid]){ //右边
            return  binarySearch(mid+1,end,nums,target);
        }else{
           return binarySearch(start,mid-1,nums,target);
        }
    }
    public int[] findNearBy(int index,int target,int[]nums){
        
        int start = index; int end =index;
        while(start>0){  //注意溢出  这里index=0没有算到,要后面判断一次
            if(nums[start]==target){
                start--;
            }else{
                break;
            }
        }
        // if(start ==0){   //0的情况
            if(nums[start]!=target){
                start = start+1;
            }
        // }
        while(end<nums.length-1){
            if(nums[end]==target){
                end ++;
            }else break;
        }
        // if(end == nums.length-1){  //length-1
            if(nums[end] != target){
                end = end-1;
            }
        // }
        int[] temp = new int[2];
        temp[0] = start;
        temp[1] = end;
        return temp;
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天好不容易做完了一个功能的开发,离下班尚有一段时间,心情大好。 结果在提交到服务器的过程中,手比脑子快的点击了u...
    心心_幸会阅读 1,300评论 0 2
  • (1) 小时候最大的梦想就是去北京上学。北京对于一个不发达地区的4,5线的县城市来说是...
    失人苑阅读 2,854评论 0 1
  • 生者必死,聚者必散,荣者必枯。 年年得知青添色,哪知百年木已腐根生。 年少不知愁滋味,却道百人愁里无他相。 如今方...
    堆雪风流阅读 3,379评论 0 4
  • 一晌贪欢入金城 热浪腾空 万里云洁白 东流的河水 冲荡着断桥 漂浮着的羊皮筏子 是你苍老的记忆 穿梭的游艇 向世界...
    浩宇_90阅读 1,040评论 0 0
  • 上完夜班,爬完楼,感触颇深,先来晨读吧。 001注意力 看完之后,想到一件比较有喜感的事情,大学期间,跟宿舍好友相...
    浊酒一壶慰风尘阅读 1,098评论 10 8