leetcode——34search-for-a-range

题目链接: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));
	}

}

猜你喜欢

转载自blog.csdn.net/u012063773/article/details/79470341