• [LeetCode]34. 在排序数组中查找元素的第一个和最后一个位置(二分)


    题目

    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

    如果数组中不存在目标值,返回 [-1, -1]。

    题解

    二分查找找目标值的第一个和最后一个。

    代码

    class Solution {
        public int[] searchRange(int[] nums, int target) {
    		int leftBound = findLeftBound(nums, target);
    		int rightBound = findRightBound(nums, target);
    		return new int[] { leftBound, rightBound };
    	}
    
    	private int findLeftBound(int[] nums, int target) {
    		int l = 0;
    		int r = nums.length - 1;
    		while (l <= r) {
    			int mid = l + (r - l) / 2;
    			if (nums[mid] >= target) { //
    				r = mid - 1;
    			} else {
    				l = mid + 1;
    			}
    		}
    		return l != nums.length && nums[l] == target ? l : -1;
    	}
    
    	private int findRightBound(int[] nums, int target) {
    		int l = 0;
    		int r = nums.length - 1;
    		while (l <= r) {
    			int mid = l + (r - l) / 2;
    			if (nums[mid] <= target) {
    				l = mid + 1;
    			} else {
    				r = mid - 1;
    			}
    		}
    		return r != -1 && nums[r] == target ? r : -1;
    	}
    }
    
  • 相关阅读:
    [POI2011]Lightning Conductor
    [NOI2009]诗人小G

    公告&留言板
    联合省选 2020 题解
    年末时的一些思维碎屑
    RE:ゼロから始める AFO 生活
    退役前的做题记录6.0
    2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解
    300iq Contest 1 简要题解
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/12268378.html
Copyright © 2020-2023  润新知