zoukankan      html  css  js  c++  java
  • LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target

    地址 https://leetcode-cn.com/problems/sum-of-mutated-array-closest-to-target/

    题目描述
    b给你一个整数数组 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

    算法1
    明显的排序后二分 比较麻烦的位置是 返回l以后我不知道是l-1更接近还是l更接近
    做了额外处理

    C++ 代码

     1 class Solution {
     2 public:
     3 
     4 
     5     int chekcVal;
     6 int check(int x, const vector<int>& arr) {
     7     int sum = 0;
     8     for (auto &e : arr) {
     9         if (e >  x) sum += x;
    10         else sum += e;
    11     }
    12 
    13     return sum- chekcVal;
    14 }
    15 
    16 int findBestValue(vector<int>& arr, int target) {
    17     sort(arr.begin(), arr.end());
    18     chekcVal = target;
    19     int l = -999999; int r = 999999;
    20     while (l < r)
    21     {
    22         int mid = (l + r) >> 1;
    23         int ret = check(mid, arr);
    24         if (ret >= 0) r = mid;
    25         else if (ret < 0) {
    26             l = mid + 1;
    27         }
    28     }
    29 
    30     int ret = l;
    31     int  retsum = abs(check(l, arr));
    32 
    33     if (abs(check(l-1, arr)) <= retsum) {
    34         ret = l-1;
    35     }
    36 
    37     return ret;
    38 }
    39 
    40 
    41 
    42 };
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    jQuery知识总结
    WEB架构师成长之路之2
    利用Travis CI 让你的github项目持续构建(Node.js为例)
    C#实现UDP分包组包
    win7下安装32位GoSublime Package
    爬虫部分技术要点浅析
    如何使用“依赖注入”的
    分布式ACM Online Judge 架构设计
    “容器组件服务”模型
    Maven学习
  • 原文地址:https://www.cnblogs.com/itdef/p/12118284.html
Copyright © 2011-2022 走看看