没有新消息
更多内容
0 条评论
暂无评论,快来写下您的评论
问题来自于
福大大
#福大大架构师每日一题#2023-12-27:用go语言,店铺数量n,编号1~n, 人的数量m,编号1~m, 每个人有自己投
2023-12-27:用go语言,店铺数量n,编号1~n, 人的数量m,编号1~m, 每个人有自己投票的店铺p,和改投1号店的报价x。 返回想让1号店铺成为人气最高的店,至少花多少钱? 1 <= p,n,m <= 3000, 1 <= x <= 10^9。 1号店铺贿赂问题。来自华为OD。
1564
阅读
4
回答
@2024 职Q 智联招聘
合作商务邮箱:sbyh@zhaopin.com.cn
友情链接
HR圈内招聘/ 同道问答/ 人资知识社区
51社保/ X职场/ HR Bar/ 中人网/ 研招网
京ICP备17067871号 合字B2-20210134
京公网安备 11010502030147号
人力资源许可证:1101052003273号
网上有害信息举报专区
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
#福大大架构师每日一题#2023-12-27:用go语言,店铺数量n,编号1~n, 人的数量m,编号1~m, 每个人有自己投
题目描述了一个场景,其中有一些店铺、一些人,每个人有一个他们想要投票的店铺和改投1号店铺的报价。 目标是确定为了让1号店铺成为人气最高的店铺,至少需要花费多少钱。 为了解决这个问题,我们可以使用贪心算法。具体步骤如下: 1. 创建一个数组dp,其中dp[i]表示让第i号店铺成为人气最高的店铺所需的最小花费。 2. 对于每个人,如果他们原本想投票给1号店铺,那么不需要花费任何钱。否则,我们需要计算将他们从当前投票的店铺转移到1号店铺所需的最小花费。这可以通过dp[当前店铺编号] + x来实现,其中x是该人的报价。 3. 对于每个人,我们更新dp数组:如果dp[当前店铺编号] + x < dp[1],则dp[1] = dp[当前店铺编号] + x。这样,我们确保了dp[1]始终表示让1号店铺成为人气最高的店铺所需的最小花费。 4. 最后,dp[1]就是我们想要的结果。 下面是相应的Go代码实现: ```go func minCostToForceVote(shops []int, bribes []int) int { n := len(shops) m := len(bribes) dp := make([]int, n+1) dp[1] = 0 for i := 1; i <= n; i++ { for j := 0; j < m; j++ { if bribes[j] > 0 && shops[j] == i { dp[i] = min(dp[i], dp[bribes[j]]+bribes[j]) } else if bribes[j] <= 0 { dp[i] = min(dp[i], dp[shops[j]]+bribes[j]) } } } return dp[n] } func min(a, b int) int { if a < b { return a } return b } ``` 这段代码首先创建了一个dp数组来存储每个店铺成为人气最高所需的最小花费。然后,对于每个人,我们检查他们的报价和原本想投票的店铺。如果他们的报价大于0并且原本想投票的店铺是当前店铺,那么我们更新dp数组。否则,如果他们的报价小于等于0或者他们原本想投票的店铺不是当前店铺,我们也更新dp数组。最后,返回dp[n],其中n是店铺的数量,即为所求的结果。