柠檬水找零-贪心算法-基于GO

在柠檬水摊上,每一杯柠檬水的售价为5美元。
顾客排队购买,一次购买一杯。

每一个顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。
必须给每个顾客正确找零。
注意:一开始你手头并没有任何零钱。
如果你能给每位顾客正确找零,则返回true,否则返回false。

  • 贪心算法
    • 顾客给你5块,不用找零
    • 顾客给你10块,找5块
    • 顾客给你20块,找10+5块或者5+5+5块(优先找10+5块,剩下5+5+5块,因为5块多了更利于找零)
package main

import (
	"fmt"
	"math"
)

func findLength(nums []int)int{
	var start = 0
	var maxLength = 0
	for i:=1;i<len(nums);i++{
		if nums[i]<=nums[i-1]{
			start = i
		}
		maxLength = int(math.Max(float64(maxLength),
							float64(i-start+1)))
	}

	return maxLength
}

func change(nums []int)bool{
	var five = 0
	var ten = 0
	for _, bill := range nums{
		switch bill {
		case 5:
			five++ // 刚刚好
		case 10:
			if five==0{
				return false
			}
			five--
			ten++
		case 20:
			if five>0 && ten>0{
				five--
				ten--
			}else if five>=3{
				five -= 3
			}else{
				return false
			}
		}
	}
	return true
}

func main(){
	//var nums = []int{5,5,20}//false
	var nums = []int{5,5,10}//true
	fmt.Println(change(nums))
}
原文地址:https://www.cnblogs.com/pangqianjin/p/14631629.html