• [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;
        }
    }
  • 相关阅读:
    WCF开发框架形成之旅---WCF的几种寄宿方式
    使用Winform程序作为WCF服务的宿主
    Winfrom 使用WCF 实现双工通讯
    WCF简单实例--用Winform启动和引用
    ASP.NET用QQ,网易发送邮件以及添加附件
    神经网络浅讲:从神经元到深度学习
    jQuery EasyUI combobox多选及赋值
    easyui combobox 带 checkbox 亲自验证
    天地图api地址
    1-3Controller之Response
  • 原文地址:https://www.cnblogs.com/lilylee/p/5418950.html
Copyright © 2020-2023  润新知