文章目录
- 前言
- 幸福值最大化的选择方案
- 从一个范围内选择最多整数 I
- 摧毁小行星
- 重排数组以得到最大前缀分数
- 三角形的最大周长
前言
💫你好,我是辰chen,本文旨在准备考研复试或就业
💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台
💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容
🌟 仅给出C++版代码
以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:
💥ACM-ICPC算法汇总【基础篇】
💥ACM-ICPC算法汇总【提高篇】
💥AIoT(人工智能+物联网)
💥考研
💥CSP认证考试历年题解
幸福值最大化的选择方案
题目链接:幸福值最大化的选择方案
C++版AC代码:
class Solution {
public:long long maximumHappinessSum(vector<int>& happiness, int k) {sort(happiness.begin(), happiness.end(), greater<>());long long res = 0;for (int i = 0; i < k; ++ i ) {int t = happiness[i];if (t >= i) res += t - i;}return res;}
};
从一个范围内选择最多整数 I
题目链接:从一个范围内选择最多整数 I
C++版AC代码:
class Solution {
public:int maxCount(vector<int>& banned, int n, int maxSum) {unordered_map<int, int> m;for (int i = 0; i < banned.size(); ++ i ) m[banned[i]] = 1;int res = 0, sum = 0;for (int i = 1; i <= n && sum + i <= maxSum; ++ i ) {if (m.find(i) == m.end()) {sum += i;res ++;}}return res;}
};
摧毁小行星
题目链接:摧毁小行星
C++版AC代码:
class Solution {
public:bool asteroidsDestroyed(int mass, vector<int>& asteroids) {sort(asteroids.begin(), asteroids.end());long long currentMass = mass;for (int i = 0; i < asteroids.size(); ++ i ) {if (currentMass >= asteroids[i]) currentMass += asteroids[i];else return false;}return true;}
};
重排数组以得到最大前缀分数
题目链接:重排数组以得到最大前缀分数
C++版AC代码:
class Solution {
public:int maxScore(vector<int>& nums) {sort(nums.begin(), nums.end(), greater<>());// 创建 long long 类型的 vector 以处理可能的溢出vector<long long> renums(nums.begin(), nums.end()); // 这里将 nums 转换为 long longfor (int i = 1; i < renums.size(); ++i) renums[i] += renums[i - 1]; int res = 0;for (int i = 0; i < renums.size() && renums[i] > 0; ++i) res++;return res;}
};
三角形的最大周长
题目链接:三角形的最大周长
C++版AC代码:
class Solution {
public:int largestPerimeter(vector<int>& nums) {sort(nums.begin(), nums.end(), greater<>());for (int i = 0; i < nums.size() - 2; ++ i ) {if (nums[i + 1] + nums[i + 2] > nums[i]) return nums[i] + nums[i + 1] + nums[i + 2];}return 0;}
};