zoukankan      html  css  js  c++  java
  • LeetCode_34.在排序数组中查找元素的第一个和最后一个位置

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

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

    进阶:

    • 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

    示例 1:

    输入:nums = [5,7,7,8,8,10], target = 8
    输出:[3,4]

    示例 2:

    输入:nums = [5,7,7,8,8,10], target = 6
    输出:[-1,-1]

    示例 3:

    输入:nums = [], target = 0
    输出:[-1,-1]

    提示:

    • 0 <= nums.length <= 105
    • -109 <= nums[i] <= 109
    • nums 是一个非递减数组
    • -109 <= target <= 109

    C#代码

    public class Solution {
        public int[] SearchRange(int[] nums, int target) {
            int[] result =new int[]{-1, -1};
            if(nums?.Length == 0) return result;
            
            int l = 0;
            int r = nums.Length - 1;
            int mid = 0;
            
            /*查找到target索引mid,不存在直接返回。时间复杂度O(log n)*/
            while(l <= r){
                mid = (l + r) / 2;
                if(nums[mid] == target) break;
                else if(nums[mid] < target) l = mid + 1;
                else r =  mid - 1;
            }   
            if(nums[mid] != target) return result;
            
            /*从mid向前查找最左边target值,一旦小于target立即停止。*/
            for(int i = mid; i > -1; i--){
                if(nums[i] == target) result[0] = i;
                else break;
            }
            
            /*从mid向前查找最左边target值,一旦大于target立即停止。**/
            for(int i = mid; i < nums.Length; i++){
                if(nums[i] == target) result[1] = i;
                else break;
            }
            
            return result;
        }
    }
    
  • 相关阅读:
    第九周学习进度
    用户场景描述
    第九天
    第10天
    求两个有序数组的中值
    计算字符串中最长子字符串的长度
    计算两个数之和
    将string 转int
    判断一个int 型整数 是否为回文数
    php 对象的一些特性
  • 原文地址:https://www.cnblogs.com/fuxuyang/p/14244623.html
Copyright © 2011-2022 走看看