zoukankan      html  css  js  c++  java
  • [Swift-2019力扣杯春季初赛]3. 最小化舍入误差以满足目标

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(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 }
  • 相关阅读:
    Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
    理解 Continuation
    99种用Racket说I love you的方式
    Racket Cheat Sheet
    scheme 教程 #lang racket
    开始学习Scheme
    MIT Scheme 的基本使用
    CPS变换
    SECD machine
    scheme 之门
  • 原文地址:https://www.cnblogs.com/strengthen/p/10708605.html
Copyright © 2011-2022 走看看