成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

leetcode462. Minimum Moves to Equal Array Elements

MartinDai / 846人閱讀

摘要:如果是偶數(shù)的話,中位數(shù)是兩個(gè)中間的數(shù)之間的任意一個(gè)數(shù)字。將從最小值逐步向最大值移動(dòng)。也就是說(shuō),如果在和間移動(dòng),二者到的距離和是不變的。同理,當(dāng)?shù)竭_(dá)中位數(shù),并且繼續(xù)向右移動(dòng)時(shí),會(huì)發(fā)現(xiàn)整體數(shù)組的移動(dòng)距離也隨之增加。

題目要求
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]

問(wèn)最少需要多少次操作,能夠?qū)?shù)組中所有元素的值修改為一樣的(操作是指將數(shù)組中的元素加一或者減一)

思路和代碼

其實(shí)這題就是找到數(shù)組的中位數(shù),該中位數(shù)就是最終修改成的元素。當(dāng)然了,這里的中位數(shù)不是廣義上的中位數(shù),當(dāng)數(shù)組的元素為奇數(shù)時(shí),“中位數(shù)”是從小到大排列后位于中間的數(shù)。如果是偶數(shù)的話,“中位數(shù)”是兩個(gè)中間的數(shù)之間的任意一個(gè)數(shù)字。

這里很多人會(huì)以為是計(jì)算出平均值作為最終元素,其實(shí)不然。簡(jiǎn)單的講一下為何“中位數(shù)”是最終元素的原因。假設(shè)有一個(gè)長(zhǎng)度為n的數(shù)組,其中包括元素a1, a2, ... an,已知該數(shù)組已經(jīng)有序,則可以知道,對(duì)于任意一個(gè)數(shù)字M,它到各個(gè)元素的距離和dist為|a[1] - M| + |a[2] - M| + ... + |a[n] - M|。如果Mdist = n * M - sum, 同理,如果M > a1, 則dist = sum - n * M。 簡(jiǎn)單來(lái)說(shuō),如果M小于最小值或是大于最大值,每個(gè)元素都必須走到最小值或最大值之外才能到達(dá)M,因此M一定位于[a1, an]之間。

現(xiàn)在開(kāi)始找M的最佳位置。將M從最小值a1逐步向最大值an移動(dòng)。假設(shè)M=a1+1且M

代碼如下:

    public int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int i = 0, j = nums.length - 1, result = 0;
        while(i < j) {
            result += nums[j--] - nums[i++];
        }
        return result;
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75666.html

相關(guān)文章

  • leetcode453. Minimum Moves to Equal Array Elements

    摘要:對(duì)二者進(jìn)行計(jì)算可以得出。假如并不是每一步都會(huì)將最小的值加一,則這個(gè)值永遠(yuǎn)是最小值,它將永遠(yuǎn)無(wú)法達(dá)到最終的目標(biāo)值。 題目要求 Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move ...

    alogy 評(píng)論0 收藏0
  • 前端 | 每天一個(gè) LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語(yǔ)言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...

    張漢慶 評(píng)論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 題攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚(yú)有什么區(qū)別...

    tain335 評(píng)論0 收藏0
  • leetcode436. Find Right Interval

    摘要:題目要求假設(shè)一個(gè)二維的整數(shù)數(shù)組中每一行表示一個(gè)區(qū)間,每一行的第一個(gè)值表示區(qū)間的左邊界,第二個(gè)值表示區(qū)間的右邊界。 題目要求 Given a set of intervals, for each of the interval i, check if there exists an interval j whose start point is bigger than or equal ...

    robin 評(píng)論0 收藏0
  • [Leetcode] Sliding Window Maximum 滑動(dòng)窗口最大值

    摘要:這樣,我們可以保證隊(duì)列里的元素是從頭到尾降序的,由于隊(duì)列里只有窗口內(nèi)的數(shù),所以他們其實(shí)就是窗口內(nèi)第一大,第二大,第三大的數(shù)。 Sliding Window Maximum Given an array nums, there is a sliding window of size k which is moving from the very left of the array to...

    lvzishen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<