10.数组元素和与数字和的绝对差
已解答
简单
相关企业
提示
给你一个正整数数组 nums 。
- 元素和 是 nums 中的所有元素相加求和。
- 数字和 是 nums 中每一个元素的每一数位(重复数位需多次求和)相加求和。
返回 元素和 与 数字和 的绝对差。
注意:两个整数 x 和 y 的绝对差定义为 |x – y| 。
示例 1:
输入:nums = [1,15,6,3]
输出:9
解释:
nums 的元素和是 1 + 15 + 6 + 3 = 25 。
nums 的数字和是 1 + 1 + 5 + 6 + 3 = 16 。
元素和与数字和的绝对差是 |25 – 16| = 9 。
示例 2:
输入:nums = [1,2,3,4]
输出:0
解释:
nums 的元素和是 1 + 2 + 3 + 4 = 10 。
nums 的数字和是 1 + 2 + 3 + 4 = 10 。
元素和与数字和的绝对差是 |10 – 10| = 0 。
提示:
- 1 <= nums.length <= 2000
- 1 <= nums[i] <= 2000
class Solution {
public:
int differenceOfSum(vector<int>& nums) {
int x=0,y=0;
for(int i=0;i<nums.size();i++){
x += nums[i];
while(nums[i]){
y += nums[i] % 10;
nums[i] /= 10 ;
}
}
return abs(x-y);
}
};
11. K 个元素的最大和
简单
相关标签
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分:
- 从 nums 中选择一个元素 m 。
- 将选中的元素 m 从数组中删除。
- 将新元素 m + 1 添加到数组中。
- 你的得分增加 m 。
请你返回执行以上操作恰好 k 次后的最大得分。
示例 1:
输入:nums = [1,2,3,4,5], k = 3
输出:18
解释:我们需要从 nums 中恰好选择 3 个元素并最大化得分。
第一次选择 5 。和为 5 ,nums = [1,2,3,4,6] 。
第二次选择 6 。和为 6 ,nums = [1,2,3,4,7] 。
第三次选择 7 。和为 5 + 6 + 7 = 18 ,nums = [1,2,3,4,8] 。
所以我们返回 18 。
18 是可以得到的最大答案。
示例 2:
输入:nums = [5,5,5], k = 2
输出:11
解释:我们需要从 nums 中恰好选择 2 个元素并最大化得分。
第一次选择 5 。和为 5 ,nums = [5,5,6] 。
第二次选择 6 。和为 6 ,nums = [5,5,7] 。
所以我们返回 11 。
11 是可以得到的最大答案。
提示:
- 1 <= nums.length <= 100
- 1 <= nums[i] <= 100
- 1 <= k <= 100
class Solution {
public:
int maximizeSum(vector<int>& nums, int k) {
int maxIdx = 0, maxScore=0;
for(int i=0;i<k;i++){
for(int i=1;i<nums.size();i++){
if(nums[i]>nums[maxIdx]){
maxIdx = i;
}
}
maxScore += nums[maxIdx];
nums[maxIdx] += 1;
}
return maxScore;
}
};
class Solution {
public:
int maximizeSum(vector<int>& nums, int k) {
int ret=0;
while(k–){
int maxIdx=0;
for(int i = 0;i<nums.size();++i){
if(nums[i] > nums[maxIdx]){
maxIdx = i;
}
}
ret += nums[maxIdx];
nums[maxIdx] += 1;
}
return ret;
}
};