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

每日一题(leetcode1702):修改后的最大二进制字符串--思维

找到第一个0之后,对于后面的子串(包括那个0),所有的0都能调上来,然后一一转化为10,因此从找到的第一个0的位置开始,接下来是(后半部分子串0的个数-1)个1,然后是一个0,接着剩下的都是1.

class Solution {
public:string maximumBinaryString(string binary) {int n=binary.size();int count=0;int index=0;for(int i=0;i<n;i++){if(binary[i]=='0'){index=i;break;}}for(int i=index;i<n;i++){if(binary[i]=='0'){count++;}}for(int j=index;j<n;j++){if(count>1){binary[j]='1';}else if(count==1){binary[j]='0';}else if(count<1){binary[j]='1';}count--;}return binary;}
};

也可以利用贪心算法,显示具体的操作过程:

class Solution {
public:string maximumBinaryString(string binary) {int n = binary.size();int j = 0;for (int i = 0; i < n; i++) {if (binary[i] == '0') {while (j <= i || (j < n && binary[j] == '1')) {j++;}if (j < n) {binary[j] = '1';binary[i] = '1';binary[i + 1] = '0';}}}return binary;}
};

注意代码中的j处于一直递增状态,如果每次从0开始则会超时。

http://www.lryc.cn/news/336061.html

相关文章:

  • PHP自助建站系统,小白也能自己搭建网站
  • 计算机视觉 | 基于 ORB 特征检测器和描述符的全景图像拼接算法
  • Scala - 函数柯里化(Currying)
  • Switch-case
  • 蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示
  • 2024/4/5—力扣—下一个排列
  • xss.pwnfunction-Ugandan Knuckles
  • LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量
  • Linux第87步_阻塞IO实验
  • C/C++基础----常量和基本数据类型
  • 什么是生成式AI?有哪些特征类型
  • 《Linux C/C++服务器开发实践》之第7章 服务器模型设计
  • SSH穿透ECS访问内网RDS数据库
  • python 有哪些函数
  • ubuntu web端远程桌面控制
  • PCL 点到三角形的距离(3D)
  • C# wpf 嵌入外部程序
  • 【ELK】ELK企业级日志分析系统
  • 详细的讲一下java的接口回调
  • 如何将powerpoint(PPT)幻灯片嵌入网页中在线预览、编辑并保存到服务器?
  • [Java基础揉碎]日期类
  • 4.10作业
  • Hive概述与基本操作
  • 安装 FFmpeg
  • 18、差分
  • 13 指针(上)
  • AI 对话完善【人工智能】
  • 利用数组储存表格数据
  • [数据概念|数据技术]智能合约如何助力数据资产变现
  • JS中的常见二进制数据格式