2652.倍数求和

编程入门 行业动态 更新时间:2024-10-25 02:30:28

2652.<a href=https://www.elefans.com/category/jswz/34/1756305.html style=倍数求和"/>

2652.倍数求和

2652. 倍数求和 - 力扣(LeetCode)

给你一个正整数 n ,请你计算在 [1,n] 范围内能被 357 整除的所有整数之和。

返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。

示例 1:

输入:n = 7
输出:21
解释:[1, 7] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7 。数字之和为 21

示例 2:

输入:n = 10
输出:40
解释:[1, 10] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7、9、10 。数字之和为 40

示例 3:

输入:n = 9
输出:30
解释:[1, 9] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7、9 。数字之和为 30

提示:

  • 1 <= n <= 103

思路解析

枚举,直接从一开始暴力求解

完整代码

class Solution {public int sumOfMultiples(int n) {int sum = 0;for(int i=1;i<=n;i++){if(i%3==0){sum+=i;}else if(i%5==0){sum+=i;}else if(i%7==0){sum+=i;}else{continue;}}return sum;}
}

思路

用的堆,主要思想是贪心,每次计算第i次就是第i次的分数除3,这个k≤105k \leq 10^5k≤105,意味着可以直接模拟。思路很明显,每次贪最大的数,而为了高效获得最大值,可以将所有数都放入到大根堆中。每次分数加上堆顶的元素,并弹出堆顶valvalval,将其变为ceil(val3)ceil(\frac{val}{3})ceil(3val​)后再放回堆中,以保持堆顶始终是最大值,重复这个过程kkk次即可。

完整代码

class Solution {public long maxKelements(int[] nums, int k) {PriorityQueue<Integer> q = new PriorityQueue<Integer>((a, b) -> b - a);for (int num : nums) {q.offer(num);}long ans = 0;for (int i = 0; i < k; ++i) {int x = q.poll();ans += x;q.offer((x + 2) / 3);}return ans;}
}

更多推荐

2652.倍数求和

本文发布于:2023-12-05 00:49:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662607.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:倍数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!