• 两数之和(升序整数数组)-基于Go


    给定一个升序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。

    • 暴力破解,O(n2)
    • map打标记,O(n),但是空间复杂度也为O(n)
    • 二分查找(对于每一个x,找target-x是否在数组中),O(nlogn)
    func solution(nums []int, target int)(int, int){
    	var low = 0
    	var high = len(nums)-1
    
    	for i:=0;i<len(nums);i++{
    		// low为其中的一个默认解
    		low = i
    		for low<high{
    			mid := (high+low)/2
    
    			if nums[mid] == target-nums[i]{
    				return i, mid
    			}else if nums[mid]>target-nums[i]{
    				high = mid-1
    			}else{
    				low = mid+1
    			}
    		}
    	}
    	return -1,-1
    }
    
    • 双指针(最优)
    func solution2(nums []int, target int)(int, int){
    	var low = 0
    	var high = len(nums)-1
    
    	for low<high{
    		switch sum:=nums[low]+nums[high];{
    		case sum==target:
    			return low, high
    		case sum<target://小了说明low小
    			low++
    		default://大了说明high大
    			high--
    		}
    	}
    	return -1, -1
    }
    
  • 相关阅读:
    点分治
    SG函数入门
    博弈论入门
    YY的gcd
    整除分块
    gcd约分函数的应用
    C++ 模拟类型(提高)
    C++数论题(博弈论)
    C++(gcd)的应用2。
    C++暴力约分(gcd).
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14629296.html
Copyright © 2020-2023  润新知