小欧的选数乘积 | 贪心 Set Go

小欧的选数乘积

https://www.nowcoder.com/practice/a94f523ebe424d0481533dc9e6138724

题意

小欧拿到了两个正整数x和y,她想进行一些操作使得x不小于y,操作方式是:选择a数组中的一个元素ai,将x乘以ai,并删掉a数组中所有的ai。

小欧想知道,自己最少进行多少次操作,可以使得x不小于y?

思路

根据题意,数组里的每个元素只能用一次,所以需要对数组进行去重,这里直接输入的时候加了个哈希表维护了。

贪心地考虑,需要操作次数最少,那每次乘的元素肯定要尽量的大,这样一次操作产生的贡献才多,所以数组排序后,从大到小进行遍历,如果x>=y就跳出循环。最后记得判断一下x和y的关系,以判断-1的情况

Go代码

package main

import (
	"fmt"
	"sort"
)

func main() {
	var x, y, n, val int
	fmt.Scan(&x, &y, &n)
	a := make([]int, 0, n)
	mp := make(map[int]struct{}, n)
	for i := 1; i <= n; i++ {
		fmt.Scan(&val)
		if _, ok := mp[val]; ok {
			continue
		}
		mp[val] = struct{}{}
		a = append(a, val)
	}
	sort.Ints(a)
	cnt := 0
	for i := len(a) - 1; i >= 0; i-- {
		if x >= y {
			break
		}
		x *= a[i]
		cnt++
	}
	if x < y {
		cnt = -1
	}
	fmt.Println(cnt)
}

#牛客创作赏金赛#
15天大厂真题带刷Go题解 文章被收录于专栏

15天大厂真题带刷Golang题解

全部评论

相关推荐

2024-12-25 09:09
四川师范大学 运营
下北泽沼气能源公司HR_田所浩二:个人比较在意wlb,不喜欢生活让步于生活,所以坚定选Walmart
点赞 评论 收藏
分享
2024-12-04 19:53
已编辑
湖南文理学院 产品经理
牛客224543458号:他想找牛马,愿意疯狂加班的,因为要证明自己
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务