当前位置: 首页 > news >正文

Leetcode3228. 将 1 移动到末尾的最大操作次数

Every day a Leetcode

题目来源:3228. 将 1 移动到末尾的最大操作次数

解法1:遍历 + 贪心

把 1 当作车,想象有一条长为 n 的道路上有一些车。

我们要把所有的车都排到最右边,例如 011010 最终要变成 000111。

如果我们优先操作右边的车,那么每辆车都只需操作一次。如果我们优先操作左边的(能移动的)车,这会制造大量的「堵车」,那么每辆车的操作次数就会更多。

算法:

  1. 从左到右遍历 s,同时用一个变量 cnt1 维护遍历到的 1 的个数。
  2. 如果 s[i] 是 1,把 cnt1 增加 1。
  3. 如果 s[i] 是 0 且 s[i−1] 是 1,意味着我们找到了一段道路,可以让 i 左边的每辆车都操作一次,把答案增加 cnt1。
  4. 遍历结束,返回答案。

代码:

/** @lc app=leetcode.cn id=3228 lang=cpp** [3228] 将 1 移动到末尾的最大操作次数*/// @lc code=start
class Solution
{
public:int maxOperations(string s){int n = s.length();int ans = 0, cnt1 = 0;for (int i = 0; i < n; i++){if (s[i] == '1')cnt1++;else if (i > 0 && s[i - 1] == '1')ans += cnt1;}return ans;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(1)。


http://www.mrgr.cn/news/511.html

相关文章:

  • STM32使用串口DMA发送+空闲中断
  • 4.1 SQL的起源与发展
  • 3D 技术对我们的生活有哪些影响?
  • 流量分析0.o
  • 安卓App开发 篇五:签名和打包
  • Kafka系列之:Kafka Connect深入探讨 - 错误处理和死信队列
  • 微前端架构下的响应式设计实现策略
  • 腾讯云短信正文模板每个变量取值最多支持6个字符出现的问题及应对方法
  • MyBatis入门
  • Ubuntu如何实现每天定时关机
  • 力扣经典题目~快乐数~零基础也能看懂哦
  • C++的依赖注入
  • 小程序分账有哪些常见的应用场景
  • C++多态
  • Qt 子窗体直接调用父窗体成员、函数、控件的方法
  • 语音助手Verbi:科技创新的未来
  • VS2017 MFC 使用3D_Button控件注意事项
  • 苍穹外卖-day03(SpringBoot+SSM的企业级Java项目实战)
  • 【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)
  • 在Oracle中对比一张表的列是否在其他N张表的列