zoukankan      html  css  js  c++  java
  • leetcode 旋转数组搜索

    lt33 搜索旋转数组

    找到target下标,不在则返回-1

    func search(nums []int, target int) int {
    	//边界判断
    	if len(nums)==0{
    		return -1
    	}
    	l:=0
    	r:=len(nums)-1
    	for l<=r{
    		mid:=l+(r-l)/2
    		if nums[mid]==target{
    			return mid
    		}
    		//分为左边有序和右边有序
    		if nums[l]<=nums[mid]{//左边有序
    			//在左边和不再左边
    			if nums[l]<=target&&target<=nums[mid]{
    				r = mid-1
    			}else{
    				l = mid+1
    			}
    		}else{
    			//在右边和不再右边
    			if nums[mid]<=target&&target<=nums[r]{
    				l = mid+1
    			}else{
    				r = mid-1
    			}
    
    		}
    	}
    	//都不是反-1
    	return -1
    }
    

    lt34 排序数组寻找第一个和最后一个位置

    func searchRange(nums []int, target int) []int {
    	res:=[]int{-1,-1}
    	if len(nums)==0{
    		return res
    	}
    	l:=0
    	r:=len(nums)-1
    	for l<=r{
    		mid:=l+(r-l)/2
    		if nums[mid]>target{
    			r = mid-1
    		}else if nums[mid]<target{
    			l = mid+1
    		}else{
    			start:=mid
    			end:=mid
    			for start>0&&nums[start-1]==target{
    				start--
    			}
    			for end<len(nums)-1&&nums[end+1]==target{
    				end++
    			}
    			res[0] = start
    			res[1] = end
    			return res
    		}
    	}
    	return res
    }
    

    lt 153旋转数组搜索最小值I

    数组元素不重复

    func findMin(nums []int) int {
    	if len(nums)==0{
    		return 0
    	}
    	//判断中间和最右边的关系
    	l:=0
    	r:=len(nums)-1
    	for l<r{
    		mid:=l+(r-l)/2
    		if nums[mid]>nums[r]{
    			l = mid+1
    		}else{
    			r = mid
    		}
    	}
    	return nums[l]
    }
    

    lt 154旋转数组搜索最小值II

    数组包含重复元素
    增加判断重复元素的步骤

    func findMin(nums []int) int {
    	if len(nums)==0{
    		return 0
    	}
    	//判断中间和最右边的关系
    	l:=0
    	r:=len(nums)-1
    	for l<r{
    		//增加判断重复元素
    		for l<r&&nums[l]==nums[l+1]{
    			l++
    		}
    		for l<r&&nums[r]==nums[r-1]{
    			r--
    		}
    		mid:=l+(r-l)/2
    		if nums[mid]>nums[r]{
    			l = mid+1
    		}else{
    			r = mid
    		}
    	}
    	return nums[l]
    }
    
  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/9527s/p/14372449.html
Copyright © 2011-2022 走看看