package
0.0.0-20240429050328-3be44a187b12
Repository: https://github.com/robertwang/golang_study.git
Documentation: pkg.go.dev
# README
2024-01-07 练习题
来源 : 2023-12-30 Python 每日一练-LeetCode-数组练习-是否组成最多糖果数
题目说明
- 给你一个数组 candies 和一个整数 extraCandies,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
- 对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有最多的糖果。注意,允许有多个孩子同时拥有最多的糖果数目。
示例:
输入: candies = [4, 2, 1, 1, 2], extraCandies = 1
输出: [true, false, false, false, false]
解释: 只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
输入: candies = [12, 1, 12], extraCandies = 10
输出: [true, false, true]
说明
输入: candies = [2, 3, 5, 1, 3], extraCandies = 3
输出: [true, true, true, false, true]
解释:
- 孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3 个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
- 孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
- 孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
- 孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。 孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
🔑 参考:
分析
参考代码
Golang 代码实现
package main
import (
"fmt"
"sort"
)
// 定义数据结构
type CandyData struct {
Candies []int
ExtraCandies int
}
// 入口
func main() {
// 所有示例测试
// all_candies := []CandyData{
// {Candies: []int{4,2,1,1,2}, ExtraCandies: 1},
// {Candies: []int{12,1,12}, ExtraCandies: 10},
// {Candies: []int{2,3,5,1,3}, ExtraCandies: 3},
// }
// for _, data := range all_candies {
// fmt.Println("初始数据", data)
// solution(data.Candies, data.ExtraCandies)
// }
data := CandyData{Candies:[]int{4,2,1,1,2}, ExtraCandies:1}
fmt.Println("初始数据", data)
// max 函数需要 golang v 1.21 版本
// fmt.Printf("最大糖果数: %v\n", max(data.Candies))
solution(data.Candies, data.ExtraCandies)
}
// 解决方案
func solution(candies []int, extraCandies int) {
// 深拷贝
bak := make([]int, len(candies))
copy(bak, candies)
// 排序
sort.Ints(bak)
debug_log("最多的糖果数量:", bak[len(bak)-1])
for inx, candy := range candies {
fmt.Printf("%d. %d + %d = %d", inx, candy, extraCandies, candy+extraCandies)
if candy+extraCandies >= bak[len(bak)-1] {
fmt.Println(" 分配后糖果数量是最多 (true)")
} else {
fmt.Println(" 分配后糖果数量不是最多 (false)")
}
}
}
Python 代码实现
方法一: 详细输出
# 详细输出
candies = [4,2,1,1,2]
extraCandies = 1
print(f"candies列表中最多糖果的数量是{max(candies)}")
s=[]
for candy in candies:
ls.append((f"{candy}+{extraCandies}={candy+extraCandies}", candy+extraCandies >= max(candies)))
print(ls)
方法二: 简化输出
# 简化输出
candies = [4,2,1,1,2]
extraCandies = 1
ls = [candy+extraCandies>=max(candies) for candy in candies]
print(ls)