加载中...
1300-转变数组后最接近目标值的数组和(Sum of Mutated Array Closest to Target)
发表于:2021-12-03 | 分类: 中等
字数统计: 583 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/sum-of-mutated-array-closest-to-target

英文原文

Given an integer array arr and a target value target, return the integer value such that when we change all the integers larger than value in the given array to be equal to value, the sum of the array gets as close as possible (in absolute difference) to target.

In case of a tie, return the minimum such integer.

Notice that the answer is not neccesarilly a number from arr.

 

Example 1:

Input: arr = [4,9,3], target = 10
Output: 3
Explanation: When using 3 arr converts to [3, 3, 3] which sums 9 and that's the optimal answer.

Example 2:

Input: arr = [2,3,5], target = 10
Output: 5

Example 3:

Input: arr = [60864,25176,27249,21296,20204], target = 56803
Output: 11361

 

Constraints:

  • 1 <= arr.length <= 104
  • 1 <= arr[i], target <= 105

中文题目

给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近  target (最接近表示两者之差的绝对值最小)。

如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。

请注意,答案不一定是 arr 中的数字。

 

示例 1:

输入:arr = [4,9,3], target = 10
输出:3
解释:当选择 value 为 3 时,数组会变成 [3, 3, 3],和为 9 ,这是最接近 target 的方案。

示例 2:

输入:arr = [2,3,5], target = 10
输出:5

示例 3:

输入:arr = [60864,25176,27249,21296,20204], target = 56803
输出:11361

 

提示:

  • 1 <= arr.length <= 10^4
  • 1 <= arr[i], target <= 10^5

通过代码

高赞题解

先按递增排序;
然后一趟遍历,发现当下值大于(目标值减去累加和除以剩下个数的值)时,则返回剩余的平均值,思路不难理解吧?
欢迎讨论。

int cmp(const void* c1, const void* c2) {
    return *(int*)c1 - *(int*)c2;
}

int findBestValue(int* arr, int arrSize, int target){
    if (arr == NULL) {
        return 0;
    }
    qsort(arr, arrSize, sizeof(int), cmp);
    int sum = 0;
    for (int i = 0; i < arrSize; i++) {
        int x = (target - sum) / (arrSize - i);
        if (x < arr[i]) {
            double t = ((double)(target - sum))/(arrSize - i);
            if (t - x > 0.5) {
                return x + 1;
            } else {
                return x;
            }
        }
        sum += arr[i];
    }
    return arr[arrSize - 1];
}

统计信息

通过次数 提交次数 AC比率
24624 52967 46.5%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
1131-绝对值表达式的最大值(Maximum of Absolute Value Expression)
下一篇:
1299-将每个元素替换为右侧最大元素(Replace Elements with Greatest Element on Right Side)
本文目录
本文目录