zoukankan      html  css  js  c++  java
  • [Swift]LeetCode462. 最少移动次数使数组元素相等 II | Minimum Moves to Equal Array Elements II

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

    Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.

    You may assume the array's length is at most 10,000.

    Example:

    Input:
    [1,2,3]
    
    Output:
    2
    
    Explanation:
    Only two moves are needed (remember each move increments or decrements one element):
    
    [1,2,3]  =>  [2,2,3]  =>  [2,2,2]

    给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。

    例如:

    输入:
    [1,2,3]
    
    输出:
    2
    
    说明:
    只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1): 
    
    [1,2,3]  =>  [2,2,3]  =>  [2,2,2]

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {
     3         //转换为变量
     4         var arr:[Int] = nums
     5         //对数组进行升序排序
     6         //sorted只返回排序数组, sort才会修改原数组
     7         //arr.sort(by: {$1 < $2})
     8         arr = arr.sorted(by: <)
     9         let len = nums.count
    10         var res:Int = 0, mid:Int = arr[len / 2]
    11         for num in arr
    12         {
    13             res += abs(num - mid)
    14         }
    15         return res
    16     }
    17 }

    24ms

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {
     3         let a = nums.sorted(by:{ $0 < $1 })
     4         var ret = 0 ,i = 0 ,j = nums.count - 1
     5         while i < j {
     6             ret += a[j] - a[i]
     7             j -= 1 ; i += 1
     8         }
     9         return ret
    10     }
    11 }

    28ms

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {        
     3         var i = 0
     4         var j = nums.count - 1
     5         var result = 0
     6         
     7         let sortedNums = nums.sorted(by:{ $0 < $1 })
     8         
     9         while i < j {
    10             result += sortedNums[j] - sortedNums[i]
    11             i += 1
    12             j -= 1
    13         }
    14         
    15         return result
    16     }
    17 }

    32ms

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {
     3         
     4         var _num = nums.sorted(by:<)
     5         
     6         var middleCount = _num.count/2
     7         
     8         var value = _num[middleCount]
     9         var steps = 0
    10         for n in _num
    11         {
    12             if n != value
    13             {
    14                steps += abs(value - n)
    15             }
    16             
    17         }
    18         
    19         return steps
    20     }
    21 }

    40ms

     1 class Solution 
     2 {
     3     func minMoves2(_ nums: [Int]) -> Int 
     4     {
     5       
     6         // option 2
     7         let arr = nums.sorted()
     8         var i = 0, j = arr.count - 1
     9         var count = 0
    10         while i < j
    11         {
    12             count += (arr[j] - arr[i])
    13             i += 1
    14             j -= 1
    15         }
    16         return count
    17     }
    18 }

    44ms

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {
     3         if (nums.count <= 1) {
     4             return 0
     5         }
     6         
     7         var nums = nums
     8         nums.sort()
     9         
    10         var count = 0
    11         for i in 0..<nums.count {
    12             count += abs(nums[nums.count/2] - nums[i])
    13         }
    14         return count
    15         
    16     }
    17 }

    48ms

     1 class Solution {
     2     func minMoves2(_ nums: [Int]) -> Int {
     3         var raw = nums
     4         raw.sort { (num1, num2) -> Bool in
     5             return num1 < num2
     6         }
     7         var sum: Int = 0
     8         let mean = raw[raw.count / 2]
     9         for i in 0 ..< nums.count {
    10             if i < raw.count / 2 {
    11                 sum += (mean - raw[i])
    12             }else {
    13                 sum += (raw[i] - mean)
    14             }
    15         }
    16         return sum
    17     }
    18 }
  • 相关阅读:
    jq随手写图片放大
    solr查询语句示例
    solr使用语法笔记
    PHP的输出缓冲区(转)
    利用fsockopen可实现异步成功访问
    mysql自动加入添加时间列
    MySQL性能分析及explain的使用
    VS 无法启动程序
    android 编写动画
    Advanced Installer
  • 原文地址:https://www.cnblogs.com/strengthen/p/9792341.html
Copyright © 2011-2022 走看看