zoukankan      html  css  js  c++  java
  • 二分查找向左或向右紧缩

     class Solution {
         public int[] searchRange(int[] nums, int target) {
       int[] res=new int[2];
          
                      res[0]=findleft(nums,target);
                      res[1]=findright(nums,target);
                      return res;
         }
         private int findright(int[] nums, int target) {
          int left=0;
          int right=nums.length;   //向左或向右紧缩时,就用nums.length; 因此while里为<号 不带等号 等就越界
          while (left<right) {
         int mid=(left+right)>>1;
          if (nums[mid]==target) {
           left=mid+1;    //向右,因为是right=nums.length;所以是左闭右开
          }
          else if (nums[mid]<target) {
           left=mid+1;
          }
          else {
           right=mid;
          }
        }
         if (left == 0) return -1;    //向右紧缩  却缩到了最左侧 说明没找到
                    return nums[left-1] == target ? (left-1) : -1;
       }

       private int findleft(int[] nums, int target) {
         int left=0;
          int right=nums.length;
          while (left<right) {
         int mid=(left+right)>>1;
          if (nums[mid]==target) {
           right=mid;      //向左紧缩,因为是right=nums.length;所以是左闭右开
          }
          else if (nums[mid]<target) {
           left=mid+1;
          }
          else {
           right=mid;
          }
        }
       if (left >= nums.length || nums[left] != target)//向左紧缩,却缩到了最右侧 说明没找到
                          return -1;
               return left;
       }
     }
  • 相关阅读:
    C# 收集几条ToString()格式
    C# 使用Quartz简单实例以及备忘
    C# Linq 常用查询操作符
    .Net Core 创建和使用中间件
    .Net Core 学习依赖注入自定义Service
    .Net Core 学习路由和请求参数传递
    .Net Core 学习新建Core MVC 项目
    ExtJS笔记5 Components
    ExtJS笔记4 容器与布局(Layouts and Containers)
    ExtJS笔记3 MVC Architecture
  • 原文地址:https://www.cnblogs.com/wl889490/p/12608518.html
Copyright © 2011-2022 走看看