LeetCode(力扣)算法题_2864_最大二进制奇数

最大二进制奇数

题目描述

给你一个 二进制 字符串 s ,其中至少包含一个 '1' 。

你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。

以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。

注意 返回的结果字符串 可以 含前导零。

示例 1:

输入:s = "010"
输出:"001"
解释:因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001" 。

示例 2:

输入:s = "0101"
输出:"1001"
解释:其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。

 

解题思路 

贪心算法

        由于是二进制,那么 temp 中的每一位,不是 0 就是 1 。根据题意可知,需要返回的是最大的二进制奇数,所以返回结果的最后一位一定是 1 。按照贪心算法的原则,要返回最大二进制奇数,需要将剩下的 1 放置在字符串的最前面。

1. 先统计字符串中 1 的数量 。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){if((s.charAt(i) - '0') == 1){temp += 1;}}}
}

2. 使用 StringBuilder 构造一个字符串,用来存储输出结果。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){if((s.charAt(i) - '0') == 1){temp += 1;}}// 用于接收输出结果的字符串StringBuilder str = new StringBuilder();}
}

3. 减去最后一位的 1 后,将剩下的 1 排在字符串的最前面。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){if((s.charAt(i) - '0') == 1){temp += 1;}}// 用于接收输出结果的字符串StringBuilder str = new StringBuilder();// 排入 1 for(int i = 0; i < temp - 1; i++){str.append("1");}}
}

4. 将剩下的 0 补上。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){if((s.charAt(i) - '0') == 1){temp += 1;}}// 用于接收输出结果的字符串StringBuilder str = new StringBuilder();// 排入 1 for(int i = 0; i < temp - 1; i++){str.append("1");}// 补上 0 for(int i = 0; i < s.length() - temp; i++){str.append("0");}}
}

5. 最后补上最后一位的 1 ,再输出结果就OK啦。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){if((s.charAt(i) - '0') == 1){temp += 1;}}// 用于接收输出结果的字符串StringBuilder str = new StringBuilder();// 排入 1 for(int i = 0; i < temp - 1; i++){str.append("1");}// 补上 0 for(int i = 0; i < s.length() - temp; i++){str.append("0");}// 最后一位 1 str.append("1");return str.toString();}
}

复杂度分析

  • 时间复杂度:O(n) 
  • 空间复杂度:O(1) 

其中 n 表示给定字符串的长度 。

代码优化

        上述代码虽然能够完成题目要求,但是写的较为繁琐,有以下可优化的点:

1. 统计数字 1 的数量可以优化为:

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){temp += s.charAt(i) - '0';}}
}

2. 利用 repeat 方法直接返回排好序的结果字符。

class Solution {public String maximumOddBinaryNumber(String s) {// 统计字符串中 1 的数量int temp = 0;for(int i = 0; i < s.length(); i++){temp += s.charAt(i) - '0';}// 返回结果字符return "1".repeat(Math.max(0, temp - 1)) + "0".repeat(Math.max(0, s.length() - temp)) + "1";}
}

当然,这样做只是简化了代码,因为反复调用 repeat 方法,导致程序的执行时间会变长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫案例2:playwright 超爽体验

参考链接&#xff1a;https://playwright.bootcss.com/python/docs/intro 目标网站&#xff1a;https://spa6.scrape.center/通过观察&#xff0c;页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

Docker安装达梦数据库(DM8)

安装目录 mkdir /opt/dm8 /opt/dm8/datadir && cd /opt/dm8 && chmod 777 /opt/dm8 /opt/dm8/datadir 下载镜像 yum -y install wget && wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar 导入镜像 docker loa…

深入挖掘C语言之——联合

目录 联合的定义 联合的特点 联合的应用场景 在C语言中&#xff0c;联合&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;它允许在同一内存地址存储不同类型的数据。与结构体&#xff08;Struct&#xff09;不同的是&#xff0c;联合中的所有成员共享同一块内…

C语言--从零开始的扫雷游戏

C语言--从零开始的扫雷游戏 1. 游戏说明2. 总体代码3. 详细讲解3.1 菜单部分3.2 游戏主体部分3.2.1 总体分析3.2.2 棋盘初始化3.2.3 棋盘展示3.2.4 设置地雷3.2.5 扫雷阶段3.2.6 统计雷个数的代码3.2.7 使用迭代的方式进行展开&#xff1a;3.2.8 扫雷部分主体代码 4. 总结 1. 游…

docker常用操作-docker私有仓库的搭建(Harbor),并将本地镜像推送至远程仓库中。

1、docker-compose安装&#xff0c;下载docker-compose的最新版本 第一步&#xff1a;创建docker-compose空白存放文件vi /usr/local/bin/docker-compose 第二步&#xff1a;使用curl命令在线下载&#xff0c;并制定写入路径 curl -L "https://github.com/docker/compos…

Linux学习:基础开发工具的使用(1)

目录 1. Linux软件包管理器&#xff1a;yum工具1.1 yum是什么&#xff08;软件商城&#xff09;1.2 yum的使用1.3 yum的背景生态 2. 项目开发与集成开发环境3. vim编辑器3.1 vim编辑器的常见模式与模式切换3.3 vim编辑器的使用3.3.1 命令模式下的常见命令&#xff1a;3.3.2 vim…

【rk3368 android6.0 恢复出厂设置功能】

rk3368 android6.0 恢复出厂设置功能 恢复出厂设置三种方法一&#xff0c;设置--进入恢复出厂设置页面二&#xff0c;发送广播形式三&#xff0c;命令形式总结 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 恢复…

阿里云数据盘挂载目录

1、先登录服务器创建新目录aaa 2、云盘都快照备份下。后续操作完核实无误了&#xff0c;您根据您需求删除快照就行&#xff0c; 然后登录服务器内执行&#xff1a; fdisk -l sblk blkid ll /aaa 3、执行&#xff1a;&#xff08;以下命令是进行数据盘做ext4文件系统并挂载…

主机、虚拟机和开发板三者互相之间能ping通的配置参数

主机网络配置 开发板网络配置 虚拟机网络配置

无人火箭研发中的重要性

Python在无人火箭研发中的重要性可以从以下几个方面来讨论&#xff1a; 大数据处理&#xff1a;无人火箭的研发过程中会产生大量的数据&#xff0c;例如传感器数据、飞行轨迹数据等。Python具有强大的数据处理能力&#xff0c;可以方便地对这些数据进行处理、分析和可视化&…

OKHttpRetrofit

完成一个get请求 1.导入依赖 implementation("com.squareup.okhttp3:okhttp:3.14.")2.开启viewBinding android.buildFeatures.viewBinding true 3.加网络权限 和 http明文请求允许配置文件 <?xml version"1.0" encoding"utf-8"?> &l…

在受污染的二叉树中查找元素(Lc1261)——DFS+哈希表

给出一个满足下述规则的二叉树&#xff1a; root.val 0如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个二叉树受到「污染…

python下载文件的一些方法

背景,pdf或其他格式文件从网页(包括其他存储,比如AWS的S3,阿里的OSS等)下载,可以用如下方法: 1. 使用 requests 模块requests 是一个广泛使用的HTTP客户端库, 可以方便地下载各种类型的文件:import requests def download_file_with_requests(url, local_filename=No…

实战LangChain(二):探索RAG——为聊天机器人注入知识

实战LangChain(二):探索RAG——为聊天机器人注入知识 实战LangChain(一):构建您的第一个聊天机器人_langchai 机器人 实战LangChain(二):探索RAG——为聊天机器人注入知识 文章目录 实战LangChain(二):探索RAG——为聊天机器人注入知识引言一、RAG是什么二、使用步…

数据结构:详解【顺序表】的实现

1. 顺序表的定义 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。动态顺序表与数组的本质区别是——根据需要动态的开辟空间大小。 2. 顺序表的功能 动态顺序表的功能一般有如下几个&#xff1a; 初始化顺序表打印顺序…

腾讯云轻量服务器地域怎么选择?上海/北京/广州哪个合适?

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

【C++教程从0到1入门编程】第九篇:STL中Vector类

一、vector的介绍 1.vector的介绍 vector是表示可变大小数组的序列容器。 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&…

G6.antv自定义箭头 懒加载数据 箭头丢失

懒加载数据会导致箭头消失&#xff0c;只能自定义箭头 层次图&#xff1a;dagre 折线&#xff1a;polyline 设置endArrow&#xff1a;true 接口懒加载数据&#xff0c;执行 this.graph.read(this.graphData); this.graph.zoom(0.6);箭头消失&#xff0c;需自定义箭头 空心箭头…

maya自动重定向测试

目录 maya导入bvh maya python脚本测试 maya python脚本调用 maya重定向 Pose-to-Motion: Cross-Domain Motion Retargeting with Pose Prior maya导入bvh GitHub - jhoolmans/mayaImporterBVH: Importer script for BVH maya python脚本测试 首先打开MAYA&#xff0c;然…

香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!

2024年第八届电力能源系统与应用国际会议&#xff08;ICoPESA 2024&#xff09; 2024年6月24日-26日 中国香港 ICoPESA 2024-Hong Kong (icpesa.org)https://icpesa.org/index.html 会议组织单位 会议出版及检索&#xff1a; 会议录用并注册的论文将由IEEE出版&#xff0c;…