[Swift-2019力扣杯春季初赛]3. 最小化舍入误差以满足目标

摘要:
原文已修改和更新!每个舍入操作Roundi可以向下舍入Floor或向上舍入Ceil。如果舍入数组的和不能达到目标值,则返回-1。否则,最小舍入误差以保留到小数点后三位的字符串格式返回,定义为∑|Roundi-|示例1:输入:price=[“0.700”,“2.800”,“4.900”],target=8输出:“1.000”解释:使用Floor、Ceil和Ceil运算得到++=0.7+0.2+0.1=1.0。示例2:输入:price=[“1.500”,“2.500”,”3.500“],target=10输出:“-1”解释:不可能实现目标。提示:1˂=价格。length˂=500表示price的每个字符串price[i]表示一个介于0和1000之间的实数,正好有3位小数。目标值介于0和1000000之间。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

给定一系列价格 [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. 1 <= prices.length <= 500
  2. 表示价格的每个字符串 prices[i] 都代表一个介于 0 和 1000 之间的实数,并且正好有 3 个小数位。
  3. target 介于 0 和 1000000 之间。

44 ms

 1 class Solution {
 2     func minimizeError(_ prices: [String], _ target: Int) -> String {
 3         var prices:[Double] = prices.map{Double($0)!}
 4         var numMin:Int = 0
 5         var numMax:Int = 0
 6         var arrFloor:[Double] = [Double]()
 7         var arrCeil:[Double] = [Double]()
 8         for price in prices
 9         {
10             let numFloor:Double = floor(price)
11             let numCeil:Double = ceil(price)
12             arrFloor.append(price - numFloor)
13             arrCeil.append(numCeil - price)
14             numMin += Int(numFloor)
15             numMax += Int(numCeil)    
16         }
17         guard target >= numMin && target <= numMax else
18         {
19             return "-1"
20         }
21         let ceilCount:Int = target - numMin
22         let floorCount:Int = prices.count - ceilCount
23         let arrFloorSort:[Double] = arrFloor.sorted(by:<)
24         var res:Double = 0.0
25         for i in 0..<floorCount
26         {
27             res += arrFloorSort[i]
28             let index:Int = arrFloor.index(of:arrFloorSort[i])!
29             arrCeil[index] = 1.0
30         }
31         arrCeil.sort()
32         res += [Double](arrCeil[0..<ceilCount]).reduce(0,+)
33         return String(format:"%.3f",res)
34     }
35 }

免责声明:文章转载自《[Swift-2019力扣杯春季初赛]3. 最小化舍入误差以满足目标》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一次linux启动故障记录实践(1):简单的文件上传下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Systemd简介与使用

按下电源键,随着风扇转动的声音,显示器上开启的图标亮起。之后,只需要静静等待几秒钟,登录界面显示,输入密码,即可愉快的玩耍了。 这是我们大概每天都做的事情。那么中间到底发生了什么? 简单地说,从BIOS或者UEFI开始读取硬盘。接下来,进入bootloader(LILO或者GRUB),bootloader开始载入内核,内核初始化完毕后,紧接着进入用户空间的...

Linux及ArmLinux程序开发笔记(零基础入门篇)

Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beerhttp://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html 目录 一、Arm-Linux程序开发平台简要介绍... 3 1.1程序开发所需系统及开发...

opencv linux

http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html https://www.google.com.hk/search?q=opencv+linux&ie=utf-8&oe=utf-8&gws_rd=cr&ei=f...

Centos7进不了图形化界面(亲测有效)

进入root用户 systemctl get-default //获取当前的默认target systemctl set-default graphical.target multi-user.target:设置当前的target,可选值有graphical.target,multi-user.target进入图形化界面multi_user.target:...

[置顶] Windows显示驱动(WDDM)编程初步(2)

欢迎转载【作者:张佩】【原文:http://www.yiiyee.cn/Blog/wddm2/】 第二部分专门只讲VIDPN。这是后面内容的基础。WDDM框架用VIDPN这个概念,来描述它所要处理的显示关系。 VIDPN VIDPN的全称是Video Present Network,这个因为词组不太好翻译(直译可以是:视频提交网络,但颇为难听),所以一般都...

Maven编译打包出错:找不到符号

项目中,使用的是maven管理,但是有几个jar不是通过maven引入的,是通过IDEA导入的,在使用maven插件编译的时候,会出现如下的一些错误: 解决方法: 在项目中创建一个目录lib,然后将jar复制到该文件夹下,最后在maven编译插件中配置如下 1 <plugin> 2...