题目链接:https://leetcode.com/problems/search-for-a-range/description/
python实现
本题以下有多种解法,各个解法差别不大,但是,运行效率有一些差别
# 39.47% best这里的百分号表示效率 class Solution(object): def searchRange(self, nums, target): if target not in nums: return [-1,-1] left = nums.index(target) right = len(nums)-1-nums[::-1].index(target) return [left,right]
其他方法:
39.47% #方法二 class Solution(object): def searchRange(self, nums, target): res = [] if target not in nums: return [-1,-1] res.append(nums.index(target)) res.append(len(nums)-1-nums[::-1].index(target)) return res #方法三 39.47% class Solution(object): def searchRange(self, nums, target): if target not in nums: return [-1,-1] left = nums.index(target) right = len(nums)-1-nums[::-1].index(target) return [left,right] #方法四 39.47% class Solution(object): def searchRange(self, nums, target): if target not in nums: return [-1,-1] left = nums.index(target) right = len(nums)-1-sorted(nums,reverse=True).index(target) return [left,right] #方法五 11% class Solution(object): def searchRange(self, nums, target): if target not in nums: return [-1,-1] left = nums.index(target) right = len(nums)-1-list(reversed(nums)).index(target) return [left,right] #方法六 20.23% class Solution(object): def searchRange(self, nums, target): res = [] if target not in nums: return [-1,-1] res.append(nums.index(target)) res.append(len(nums)-1-list(reversed(nums)).index(target)) return res #方法七 39.47% class Solution(object): def searchRange(self,nums,target): res = [-1,-1] left = 0;right = len(nums)-1 while(left <= right): mid = (left+right) // 2 if nums[mid] > target: right = mid - 1 elif nums[mid] < target: left = mid + 1 else: res[0] = mid res[1] = mid i = mid - 1 while(i >= 0 and nums[i]==target): res[0] = i i-=1 i = mid + 1 while(i<len(nums) and nums[i] == target): res[1] = i i += 1 break return res
java解法
package test; import java.util.Arrays; public class Leetcode_34 { public int[] searchRange(int[] nums, int target) { int[] result = {-1,-1}; int left = 0; int right = nums.length - 1; while (left <= right) { int mid = (left + right)/2; if (nums[mid] > target) { right = mid - 1; }else if (nums[mid] < target) { left = mid + 1; }else { result[0] = mid; result[1] = mid; int i = mid - 1; while(i >= 0 && nums[i]==target){ result[0] = i; i--; } int j = mid+1; while (j < nums.length && nums[j] == target) { result[1] = j; j++; } break; } } return result; } public static void main(String[] args) { // TODO Auto-generated method stub int[] nums = {5,7,7,8,8,8,10}; Leetcode_34 l = new Leetcode_34(); int[] result = new int[2]; result = l.searchRange(nums, 8); System.out.println(Arrays.toString(result)); } }