文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数。

示例 1:
输入:[1,0,1,0,1]
输出:1
解释:
有三种可能的方法可以把所有的 1 组合在一起:
[1,1,1,0,0],交换 1 次;
[0,1,1,1,0],交换 2 次;
[0,0,1,1,1],交换 1 次。
所以最少的交换次数为 1。示例 2:
输入:[0,0,0,1,0]
输出:0
解释:
由于数组中只有一个 1,所以不需要交换。示例 3:
输入:[1,0,1,0,1,0,0,1,1,0,1]
输出:3
解释:
交换 3 次,一种可行的只用 3 次交换的解决方案是 [0,0,0,0,0,1,1,1,1,1,1]。提示:
1 <= data.length <= 10^5
0 <= data[i] <= 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-swaps-to-group-all-1s-together
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先计算出有多少个1,假设为k个
  • 然后用一个固定大小为k的窗口,遍历数组,记录窗口内0的最小个数即为答案
class Solution {public:int minSwaps(vector<int>& data) {int one = 0, i, j, minsp = INT_MAX;for(i = 0; i < data.size(); ++i){if(data[i])one++;}i = 0; j = 0;int count = 0;while(j < one-1){if(data[j++])count++;}for( ; j < data.size(); ++j){if(data[j])count++;minsp = min(minsp, one-count);if(data[i++])count--;}return minsp;}
};

208 ms 64.5 MB


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

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)相关推荐

  1. LeetCode 2134. 最少交换次数来组合所有的 1 II(数组*2 + 滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 交换 定义为选中一个数组中的两个 互不相同 的位置并交换二者的值. 环形 数组是一个数组,可以认为 第一个 元素和 最后一个 元素 相邻 . 给你一个 二 ...

  2. 最少交换次数python_leetcode第200周赛第三题leetcode1536. 排布二进制网格的最少交换次数...

    leetcode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格 ...

  3. python 数组排序最少交换次数_数组排序 使得交换次数最少

    题目: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序. 求最少需要多少次交换,能把数组排成按1-n递增的顺序,(数组中的元素互不重复). 比如 初始状态 5 4 3 2 1 .交换 ...

  4. leetcode 424. 替换后的最长重复字符(滑动窗口)

    给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意:字符串长度 和 k 不会超过 104 ...

  5. LeetCode 1536. 排布二进制网格的最少交换次数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 ...

  6. leetcode1536. 排布二进制网格的最少交换次数(贪心算法)

    给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 . 请你返回使网格满足要求的最少操作次数, ...

  7. 通过交换相邻数来完成排序所需要的最少交换次数

    对一个无序序列进行排序,要求一次只能交换相邻的两个数,那么最少需要交换多少次才可以完成排序呢? 本问题假设序列所有数各不相同. 概念介绍: 1.逆序.一般认为从左向右序列的数字增大认为是正序的,那么从 ...

  8. 最少交换次数python_史上最简单!冒泡、选择排序的Python实现及算法优化详解

    1.排序概念 内部排序和外部排序 根据排序过程中,待排序的数据是否全部被放在内存中,分为两大类: 内部排序:指的是待排序的数据存放在计算机内存中进行的排序过程: 外部排序:指的是排序中要对外存储器进行 ...

  9. LeetCode 438. Find All Anagrams in a String--字符串-滑动窗口--C++,Python解法

    题目地址:Find All Anagrams in a String - LeetCode Given a string s and a non-empty string p, find all th ...

最新文章

  1. struct 与class 的区别?
  2. webpack优化相关操作
  3. 变种GandCrab样本分析
  4. web前端url传递值 js加密解密
  5. java树算法_Java数据结构算法(三)树
  6. 使用协同过滤推荐电影
  7. centos 限制只能访问某个目录的php文件
  8. Leetcode--2. 两数相加
  9. 成都鸿蒙脱模剂厂家,现场体验荣耀智慧屏与鸿蒙OS,荣耀Life成都店与您共享锐科技...
  10. Linux基础之命令练习Day4-fdisk,mkfs,mlabel,mount,umount,mkswap,swapon,dd,top,free,ps,kill,rpm,yum,make...
  11. 都说开完电动汽车,就不想再开回燃油车了,是这样吗?
  12. 1062. 最简分数(20)-PAT乙级真题
  13. 吴恩达神经网络和深度学习-学习笔记-40-目标定位
  14. 新媒体时代,内容为王已经走偏
  15. 基于Springboot健身会员俱乐部管理系统设计
  16. docker部署环境
  17. go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?
  18. 九度1001 A+B for Matrices
  19. 1exe1.net - 1个exe文件搞定1切
  20. opencv 寻找轮廓线与轮廓线的交点, 轮廓与圆的交点

热门文章

  1. Linux中配置ftp服务器
  2. 互联网金融行业申请评分卡(A卡)简介
  3. excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
  4. C++中operator的主要用法
  5. 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
  6. 《跟我一起写Makefile》读书笔记(1)
  7. 动态查找表之二叉搜索树
  8. django中的admin组件之自定义组件的增删改查的完善
  9. Makefile文件(四)_书写命令
  10. asp.net 的页面几种传值方式