• 【力扣-1300打卡】


    package com.example.demomain.demoleetcode.medium;
    
    import org.junit.jupiter.api.Test;
    
    import java.util.Arrays;
    
    /**
     * 给你一个整数数组 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
     */
    public class FindBestValue {
        public int findBestValue(int[] arr, int target) {
            Arrays.sort(arr);
            int len = arr.length;
            int curSum = 0;
            for (int i = 0; i < len; i++) {
                int curAve = (target - curSum) / (len - i);
                // 发现当下值大于(目标值减去累加和除以剩下个数的值)时,则返回剩余的平均值
                if (curAve < arr[i]) {
                    //剩余的平均值
                    double curAveDou = (target * 1.0 - curSum) / (len - i);
                    if (curAveDou - curAve <= 0.5) {
                        return curAve;
                    } else {
                        return curAve + 1;
                    }
                }
                curSum += arr[i];
            }
            return arr[len - 1];
        }
    
        @Test
        public void test() {
            /*int[] arr = {4, 9, 3};
            int target = 10;
            int result = findBestValue(arr, target);
            System.out.println(result);*/
    
           /* int[] arr1 = {2, 3, 5};
            int target1 = 10;
            int result1 = findBestValue(arr1, target1);
            System.out.println(result1);*/
    
            int[] arr11 = {60864,25176,27249,21296,20204};
            int target11 = 56803;
            int result11 = findBestValue(arr11, target11);
            System.out.println(result11);
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
  • 相关阅读:
    SpringBoot整合Neo4j
    机器学习(三)之监督学习2
    C++PrimerPlus(第6版)中文版:Chapter13.3多态共有继承例子(重点讲虚函数):usebrass2.cpp
    cartographer中创建轨迹
    程序员自由创业周记#13:第一桶金
    【LeetCode】232.用栈实现队列
    联盟认证 | 聚铭网络正式成为中国反网络病毒联盟成员
    uniapp(uncloud) 使用生态开发接口详情5(云公共模块)
    Python:RSA秘钥生成与加密解密整理
    MySQL实践——MySQL权限
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/127718774