zoukankan      html  css  js  c++  java
  • [Leetcode]Search for a Range

    No.34, Search for a Range

    后面的还是用java写吧。

    这道题主要是找target在排好序的数组中的起始位置,例如5 7 7 8 8 10里面找8,结果为3,4,即从index=3到index=4都是8。题目要求O(logn),即二分。

    这道题可以先找左起点,再找右终点,2logn。

    以找左起点为例,如果中间值小于目标,则找右半,其余找左半(如果中间值等于目标值,也是要找左半的,因为左半可能还有目标值)。left=right的情况也要计算,否则会漏,比如123找2,第一轮,left=0 right=2 mid=1然后right更新为0,此时必须再来一轮,left=0 right=0 mid=0,而1<2,left更新为1。但是一旦加上left=right的情况,如果中间值一直小于目标值,left一直加,加到了数组的长度,此时可能会越界,因此还需要加入越界判断。

    找右终点同理。

    当然可以把两个用一个boolean的参数合并成一个函数。

    public class Solution {
            public int[] searchRange(int[] nums, int target) {
            int[] result=new int[2];
            result[0]=findPosL(nums,target);
            result[1]=findPosR(nums,target);
            
            return result;
        }
        public int findPosL(int[] a, int target){
            int left=0;
            int right=a.length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(a[mid]<target){
                    left=mid+1;
                }
                else{
                    right=mid-1;
                }
            }
            if(left>=a.length||a[left]!=target)
                return -1;
            return left;
        }
        public int findPosR(int[] a, int target){
            int left=0;
            int right=a.length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(a[mid]>target){
                    right=mid-1;
                }
                else{
                    left=mid+1;
                }
            }
            if(right<0||a[right]!=target)
                return -1;
            return right;
        }
    }
  • 相关阅读:
    uva 1605 building for UN ——yhx
    uva 120 stacks of flapjacks ——yhx
    uva133-S.B.S.
    Uva10082 WERTYU -S.B.S.
    Quicksum-S.B.S.
    NOIP2014提高组 DAY1 -SilverN
    NOIP2013普及组 -SilverN
    uva 1354 Mobile Computing ——yhx
    UVa 11292 Dragon of Loowater
    UVa 839 Not so Mobile
  • 原文地址:https://www.cnblogs.com/lilylee/p/5418950.html
Copyright © 2011-2022 走看看