日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1674. 使数组互补的最少操作次数(差分思想)

發(fā)布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1674. 使数组互补的最少操作次数(差分思想) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個長度為 偶數(shù) n 的整數(shù)數(shù)組 nums 和一個整數(shù) limit 。
每一次操作,你可以將 nums 中的任何整數(shù)替換為 1 到 limit 之間的另一個整數(shù)。

如果對于所有下標(biāo) i(下標(biāo)從 0 開始),nums[i] + nums[n - 1 - i] 都等于同一個數(shù),則數(shù)組 nums 是 互補(bǔ)的 。
例如,數(shù)組 [1,2,3,4] 是互補(bǔ)的,因?yàn)閷τ谒邢聵?biāo) i ,nums[i] + nums[n - 1 - i] = 5 。

返回使數(shù)組 互補(bǔ) 的 最少 操作次數(shù)。

示例 1: 輸入:nums = [1,2,4,3], limit = 4 輸出:1 解釋:經(jīng)過 1 次操作,你可以將數(shù)組 nums 變成 [1,2,2,3]: nums[0] + nums[3] = 1 + 3 = 4. nums[1] + nums[2] = 2 + 2 = 4. nums[2] + nums[1] = 2 + 2 = 4. nums[3] + nums[0] = 3 + 1 = 4. 對于每個 i ,nums[i] + nums[n-1-i] = 4 ,所以 nums 是互補(bǔ)的。示例 2: 輸入:nums = [1,2,2,1], limit = 2 輸出:2 解釋:經(jīng)過 2 次操作,你可以將數(shù)組 nums 變成 [2,2,2,2] 。 你不能將任何數(shù)字變更為 3 ,因?yàn)?3 > limit 。示例 3: 輸入:nums = [1,2,1,2], limit = 2 輸出:0 解釋:nums 已經(jīng)是互補(bǔ)的。提示: n == nums.length 2 <= n <= 10^5 1 <= nums[i] <= limit <= 10^5 n 是偶數(shù)。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-moves-to-make-array-complementary
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

參考:吳自華大佬

數(shù)對的和的范圍 [2, 2*limit],使用差分?jǐn)?shù)組記錄 數(shù)對的和 在數(shù)軸上對應(yīng)區(qū)間的操作次數(shù)的增量


類似題目:
LeetCode 1094. 拼車
LeetCode 370. 區(qū)間加法(差分思想)
LeetCode 995. K 連續(xù)位的最小翻轉(zhuǎn)次數(shù)(差分思想)
LeetCode 732. 我的日程安排表 III(差分思想)

class Solution { public:int minMoves(vector<int>& nums, int limit) {int n = nums.size();vector<int> delta(2*limit+2, 0);//差分?jǐn)?shù)組for(int i = 0; i < n/2; i++){int a = min(nums[i], nums[n-1-i]);int b = max(nums[i], nums[n-1-i]);delta[2] += 2;//初始為2次 [2, a+1)delta[1+a]--;// sum < 1+a 時2次。[a+1, a+b) 需要1次,差值-1delta[a+b]--;// sum = a+b 時 不需要操作 0,差值 -1delta[a+b+1]++; // [a+b+1, b+limit] 時,需要操作1次,差值 +1 delta[b+1+limit]++; // [b+limit+1, 2*limit] 時,需要操作2次,差值+1}int presum = 0, ans = n;for(int i = 2; i <= 2*limit; ++i) {presum += delta[i];ans = min(ans, presum);}return ans;} };

360 ms 87.4 MB C++


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

長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1674. 使数组互补的最少操作次数(差分思想)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。