leetcode ——34.在排序数组中查找元素的第一个和最后一个位置

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        a=nums.count(target)
        if a==0:
            return [-1,-1]
        else:
            d=nums.index(target)
            if a==1:
                return [d,d]
            else:
                return [d,d+a-1]
执行用时 :112 ms, 在所有 Python3 提交中击败了77.01%的用户
内存消耗 :15 MB, 在所有 Python3 提交中击败了5.30%的用户
 
别人有运行时间短的例子,但是我看不进去了,只能挑最简单的方法来做了。。。
脑子已经运行不动了。
 
                                                                                    ——2019.10.8
 

二分法
public int[] searchRange(int[] nums, int target) {
        //二分法
        int len = nums.length;
        if(len == 0){
            return new int[]{-1,-1};
        }
        if(len == 1){
            if(nums[0] != target){
                return new int[]{-1,-1};
            }else{
                return new int[]{0,0};
            }
        }
        int left = 0,right = len;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {  //左右两边扩散搜索
                int k = mid - 1;
                while (k >= left) {
                    if (nums[k] == target) {
                        k--;
                    } else {
                        break;
                    }
                }
                while (mid + 1 < right) {
                    if (nums[mid + 1] == target) {
                        mid++;
                    } else {
                        break;
                    }
                }
                return new int[]{k + 1, mid};
            } else if (nums[mid] > target) {
                right = mid;
            }else{
                left = mid+1;
            }
        }
        return new int[]{-1,-1};
    }

 

 

——2020.7.14

posted @ 2019-10-08 17:29  欣姐姐  阅读(210)  评论(0)    收藏  举报