【1703. 得到连续 K 个 1 的最少相邻交换次数】
admin
2024-04-26 06:32:52
0

来源:力扣(LeetCode)

描述:

给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1 。每一次移动,你可以选择 相邻 两个数字并将它们交换。

请你返回使 nums 中包含 k 个 连续 1 的 最少 交换次数。

示例 1:

输入:nums = [1,0,0,1,0,1], k = 2
输出:1
解释:在第一次操作时,nums 可以变成 [1,0,0,0,1,1] 得到连续两个 1 。

示例 2:

输入:nums = [1,0,0,0,0,0,1,1], k = 3
输出:5
解释:通过 5 次操作,最左边的 1 可以移到右边直到 nums 变为 [0,0,0,0,0,1,1,1] 。

示例 3:

输入:nums = [1,1,0,1], k = 2
输出:0
解释:nums 已经有连续 2 个 1 了。

提示:

  • 1 <= nums.length <= 105
  • nums[i] 要么是 0 ,要么是 1 。
  • 1 <= k <= sum(nums)

方法:贪心 + 前缀和

思路

设数组 nums 的长度为 n,其中共有 m 个 1,它们在数组 nums 中的下标分别为 p0, p1, ,…, pm−1 。假设经过若干次交换后,数组 nums 中形成的 k 个连续的 1 的下标为 q, q + 1, …, q + k − 1。根据贪心的思想,要想交换次数最少,必须满足以下两个条件:

  • 这 k 个连续的 1 的起始下标在 p 数组中是连续的,即下标为 pi , pi+1 ,…, pi+k−1
  • k 个 1 的起始下标和结尾下标是按顺序对应的,即下标为 pi 的 1 交换到 q,下标为 pi+k−1 的 1 交换到 q + k - 1 ,中间的元素也需要按照顺序。

代码:

class Solution {
public:int minMoves(vector& nums, int k) {vector g;vector preSum(1, 0);for (int i = 0; i < nums.size(); i++) {if (nums[i] == 1) {g.emplace_back(i - g.size());preSum.emplace_back(preSum.back() + g.back());}}int m = g.size(), res = INT_MAX;for (int i = 0; i <= m - k; i++) {int mid = i + k / 2;res = min(res, (1 - k % 2) * g[mid] +  \(preSum[i + k] - preSum[mid + 1]) - \(preSum[mid] - preSum[i]));}return res;}
};

执行用时:100 ms, 在所有 C++ 提交中击败了89.80%的用户
内存消耗:122.6 MB, 在所有 C++ 提交中击败了14.96%的用户
复杂度分析
时间复杂度: O(n),其中 n 是数组 nums 的长度。
空间复杂度: O(n)。
author:LeetCode-Solution

相关内容

热门资讯

异环自动化刷钱技巧与高效赚钱方... 异环手游中如何高效刷取游戏货币?许多玩家在体验送货跑图或粉爪大劫案等重复性玩法时,容易产生操作疲劳。...
QQ飞车卡在加载界面无法进入?... 《QQ飞车》作为一款运行多年的老牌竞速网游,对硬件配置要求其实较为亲民。现实中,多数玩家并未频繁升级...
Steam更新无法连接网络?快... Steam客户端在更新过程中频繁提示“无法连接网络”,已成为近期玩家社区中讨论热度最高的技术问题之一...
2026耐玩又有趣的方舟题材手... 方舟题材手游普遍以程序化生成与生存机制为核心,强调玩家在极端环境中维系生命、延续文明的沉浸式体验。这...
一念逍遥账号交易平台推荐:安全... 在修仙类手游市场中,《一念逍遥》凭借其独特的境界突破体系与高自由度的养成路径,长期稳居品类头部。随着...
2026热门太空狼人杀游戏推荐... 太空狼人题材游戏融合逻辑推理、实时社交与轻度操作体验,成为当下碎片化娱乐场景中的热门选择。这类游戏不...
无悔华夏李存孝名臣强度解析与实... 提到中国古代战力巅峰的武将,李存孝无疑是极具代表性的存在。作为唐末五代时期李克用麾下“十三太保”之首...
2026年热门免费少儿益智游戏... 如今,越来越多家长关注儿童数字启蒙教育,寓教于乐的免费益智手游成为学龄前儿童认知发展的重要辅助工具。...
暗黑破坏神4卡顿怎么办?全面解... 《暗黑破坏神IV》凭借其标志性的哥特式暗黑风格与沉浸式开放世界体验,持续吸引全球玩家深度投入。然而,...
曙光英雄青木角色全面解析:技能... 在《曙光英雄》这款MOBA手游中,青木是一位兼具高爆发、强机动性与战术隐蔽性的特色射手英雄。初次接触...