文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一系列价格 [p1,p2…,pn] 和一个目标 target,将每个价格 pi 舍入为 Roundi(pi) 以使得舍入数组 [Round1(p1),Round2(p2)...,Roundn(pn)] 之和达到给定的目标值 target。每次舍入操作 Roundi(pi) 可以是向下舍 Floor(pi) 也可以是向上入 Ceil(pi)

如果舍入数组之和无论如何都无法达到目标值 target,就返回 -1。
否则,以保留到小数点后三位的字符串格式返回最小的舍入误差,其定义为 Σ |Roundi(pi) - (pi)|( i 从 1 到 n )。

示例 1:
输入:prices = ["0.700","2.800","4.900"], target = 8
输出:"1.000"
解释:
使用 Floor,Ceil 和 Ceil 操作得到
(0.7 - 0) + (3 - 2.8) + (5 - 4.9) = 0.7 + 0.2 + 0.1 = 1.0 。示例 2:
输入:prices = ["1.500","2.500","3.500"], target = 10
输出:"-1"
解释:
达到目标是不可能的。提示:
1 <= prices.length <= 500
表示价格的每个字符串 prices[i] 都代表一个介于 0 和 1000 之间的实数,并且正好有 3 个小数位。
target 介于 0 和 1000000 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimize-rounding-error-to-meet-target
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {public:string minimizeError(vector<string>& prices, int target) {vector<int> decimal;int num;for(string& p : prices){target -= stoi(p);//先把整数部分减去num = stoi(p.substr(p.size()-3));if(num != 0)decimal.push_back(num);//有小数的}if(target > decimal.size())//全部向上取整都不够的return "-1";if(target < 0)//全部向下取整,和还超过targetreturn "-1";sort(decimal.rbegin(), decimal.rend());//大的在前面(靠近1)int error = 0;for(int i = 0; i < decimal.size(); ++i)//所有非0的小数都要取整{if(target > 0)error += 1000-decimal[i],//向上取整,大的小数优先target--;else if(target == 0)//不需要了,全部舍弃小数error += decimal[i];}char ch[8];//最多500,3位+.1位+3小数+\0 1位 = 8sprintf(ch, "%.3f", double(error)/1000);return string(ch);}
};

4 ms 7.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1058. 最小化舍入误差以满足目标(排序+贪心)相关推荐

  1. LeetCode 1981. 最小化目标值与所选元素的差(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个大小为 m x n 的整数矩阵 mat 和一个整数 target . 从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 和 与 ...

  2. LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., st ...

  3. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...

  4. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...

  5. LeetCode 2035. 将数组分成两个数组并最小化数组和的差

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个 ...

  6. 最大化最小值和最小化最大值

    最小化最大值是为了压制优化目标中表现最突出的成分,最大化最小值为了提升优化目标中表现最差的成分 关于这两者的理解,我觉得这篇博文讲得非常好,浅显易懂又联系实际. 理解问题后,就要思考如何解决问题. 记 ...

  7. 力扣 774. 最小化去加油站的最大距离 二分答案

    774. 最小化去加油站的最大距离 整数数组 stations 表示 水平数轴 上各个加油站的位置.给你一个整数 k . 请你在数轴上增设 k 个加油站,新增加油站可以位于 水平数轴 上的任意位置,而 ...

  8. 最小化局部边际的合并聚类算法(中篇)

    作者:钱烽 三.合并聚类算法 基于定义2所提出的相似度定义,我们在图2中给出最小化局部边际的合并聚类算法详细执行过程.首先,针对数据集中可能存在的噪声数据,我们对所有样本点进行孤立点检测.然后,作为A ...

  9. C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】

    protected override void WndProc(ref Message m)         {             const int WM_SYSCOMMAND = 0x011 ...

最新文章

  1. 这么全的数组去重,你怕不怕?
  2. Pandas处理Excel文件源码学习
  3. Jackson相关的一些注解
  4. Touch the AppCache manifest file
  5. python rpc webservice_PythonXMLRPC服务器端和客户端实例
  6. java entry迭代,如何迭代Entry / BarEntry ArrayList并修改它们的值MPAndroid Chart
  7. python读取超大文件-强悍的Python读取大文件的解决方案
  8. 汇编三星题:已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把在A中而不在B中出现的整数放于数组C中。
  9. Win7原版|MSDN Windows7 SP1官方原版ISO镜像下载(全版本)
  10. 运筹系列58:python使用numba进行加速
  11. 如何利用魔棒工具抠图_ps魔棒工具怎么用?抠图常用工具(二)
  12. 【百战GAN】SRGAN人脸低分辨率老照片修复代码实战
  13. 重磅!!毕业将近,论文免费查重工具任你选,非常值得收藏!
  14. python实现微信聊天机器人_用python玩微信,实现聊天机器人,新手必学
  15. 集集自助服务密码重置
  16. 纵向数据中抑郁检测与预测的深度多任务学习
  17. Windows引导过程(BIOS,UEFI)
  18. Python用while循环,打印9*9乘法表
  19. vuex入门到实战——实现一个todoList待办清单【学习记录】
  20. Bancor协议丨EKT多链技术通往新区块世界的大桥

热门文章

  1. Mongodb基本使用方法
  2. java统计系统线程数_Java并发(八)计算线程池最佳线程数
  3. 数据库函数依赖及范式
  4. VMware Ubuntu 全屏问题解决
  5. TCP/ip通信模式
  6. 计算机一级繁体字转换,繁体字转换器
  7. 前端面试之前要准备的那些事
  8. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)
  9. C语言中的字节对齐以及其相关处理
  10. 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比