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

    简介

    暴力, 不过推荐官方的二分查找

    code

    class Solution {
    public:
        vector<int> searchRange(vector<int>& nums, int target) {
            bool check = false;
            int indexS=-1, indexE = -1;
            for(int i=0; i<nums.size(); i++){
                
                if(nums[i] == target && !check){
                    indexS = i;
                    check = true;
                }else if(check && nums[i] > target){
                    indexE = i - 1;
                    check = false;
                    return {indexS, indexE};
                }
                if(nums[i] > target && !check) return {-1, -1};
            }
            if(check && indexE == -1) {
                indexE = nums.size() - 1;
            }
            return {indexS, indexE};
        }
    };
    
    class Solution {
        public int[] searchRange(int[] nums, int target) {
            int len = nums.length;
            if(len == 0) {
                return new int[]{-1, -1};
            }
    
            int firstPosition = findFirstPosition(nums, target);
            if(firstPosition == -1){
                return new int[] {-1, -1};
            }
    
            int lastPosition = findLastPosition(nums, target);
            return new int[]{firstPosition, lastPosition};
        }
    
        private int findLastPosition(int[] nums, int target) {
            int left = 0;
            int right = nums.length -1;
            while(left < right) {
                int mid = (left + right + 1) >>> 1; // 让其更靠近右边界
                if(nums[mid] < target) {
                    left = mid + 1;
                } else if(nums[mid] == target) {
                    left = mid;
                } else{
                    right = mid - 1;
                }
            }
            return left;
        }
    
        private int findFirstPosition(int[] nums, int target) {
            int left = 0;
            int right = nums.length -1;
            while(left < right) {
                int mid = (left + right) >>> 1;
                if(nums[mid] < target) {
                    left = mid + 1;
                } else if(nums[mid] == target) {
                    right = mid;
                } else{
                    right = mid - 1;
                }
            }
            if(nums[left] == target){
                return left;
            }
            return -1;
        }
    }
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    js 回车调用后台事件
    获取下拉框选中的值:
    MVC 3.0 在各个版本IIS中的部署
    创建Windows域
    SQL Server 事务、异常和游标
    IIS配置PHP环境(快速最新版)
    js操作select下拉框
    如何清除访问远程网络时保存的密码
    免费Web服务
    Firefox不支持event解决方法
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14844011.html
Copyright © 2011-2022 走看看