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 方法,导致程序的执行时间会变长。
相关文章:
LeetCode(力扣)算法题_2864_最大二进制奇数
最大二进制奇数 题目描述 给你一个 二进制 字符串 s ,其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式,表示并返回可以由给定组合生成的最大二进…...
食药物质创新 赋能中式滋补健康产业发展交流会圆满结束
3月5日,“食药物质创新 赋能中式滋补健康产业发展交流会”在山东国际会展中心召开。本次会议由中国生物发酵产业协会主办,浙江科技大学、未名太研生物科技(绍兴)有限公司承办,汇乐达供应链服务(常州)有限责任公司支持。本次论坛旨在加强行业创…...
用好大模型、承载“头雁领航”使命,央企如何三路出击?
作者 | 曾响铃 文 | 响铃说 智能化成为两会热议话题,2024政府工作报告中也直接提到要深化大数据、人工智能等研发应用,开展“人工智能”行动。 毫无疑问,大模型热潮下,以智能化推进传统产业升级已经成为普遍共识。 具体如何做…...
LabVIEW飞机液压基础试验台测试系统
LabVIEW飞机液压基础试验台测试系统 为解决飞机液压基础实验台人工控制操作复杂、测试时间长、测试流程易出错等问题,开发了一套基于LabVIEW的飞机液压基础试验台测试系统。该系统通过计算机控制,实现了高度自动化的测试流程,有效提高了测试…...
STM32第十课:串口发送
一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…...
淘宝扭蛋机小程序:探索未知的惊喜之旅
你是否曾在商场里被那闪闪发光的扭蛋机吸引,却因为种种原因无法下手?现在,淘宝扭蛋机小程序带给你全新的扭蛋体验,让你随时随地都能感受到那份未知的惊喜。 淘宝扭蛋机小程序是一款集娱乐与购物于一体的全新应用。它汇聚了众多热…...
[nlp入门论文精读] | Transformer
写在前面 最近工作从CV转向了NLP,于是空余时间便跟着哔哩哔哩李沐老师的视频学习。其实研一NLP课程讲论文的时候,我们小组就选择了经典的Attention和Bert,但还有很多细节并不完全理解,实际使用时也很困惑。 因此这个系列就来记…...
科技回顾,飞凌嵌入式受邀亮相第八届瑞芯微开发者大会「RKDC2024」
2024年3月7日~8日,第八届瑞芯微开发者大会(RKDC2024)在福州举行,本届大会以“AI芯片AI应用AloT”为主题,邀请各行业的开发者共启数智化未来。 本届大会亮点颇多,不仅有13大芯片应用展示、9场产品和技术论坛…...
代码随想录算法训练营第五十九天丨503. 下一个更大元素 II、42. 接雨水
503. 下一个更大元素 II 还是比较容易想的,扩展数组一倍即可。 class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:extended_nums nums * 2n len(nums)mono []res [- 1] * nfor i, num in enumerate(extended_nums):while mono…...
全代码分享|R语言孟德尔随机化怎么做?TwoSampleMR包MR一套标准流程
文章目录 1.前言1.1 成立条件1.2 三大要素1.3 统计原理 2.demo2.1 加载R包2.2 主要MR分析2.3 MR补充分析、多态性、验证 2.4 结果可视化 1.前言 孟德尔随机化(Mendelian randomization,MR)是一种利用基因变异作为工具变量来评估暴露与结果之间因果关系的统计方法。…...
【AI视野·今日NLP 自然语言处理论文速览 第八十四期】Thu, 7 Mar 2024
AI视野今日CS.NLP 自然语言处理论文速览 Thu, 7 Mar 2024 Totally 52 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Heuristic Core: Understanding Subnetwork Generalization in Pretrained Language Models Authors Adith…...
英伟达推出免训练,可生成连贯图片的文生图模型ConsiStory,生成角色一致性解决新方案
目前,多数文生图模型皆使用的是随机采样模式,使得每次生成的图像效果皆不同,在生成连贯的图像方面非常差。 例如,想通过AI生成一套图像连环画,即便使用同类的提示词也很难实现。虽然DALLE 3和Midjourney可以对图像实现…...
Jmeter 性能 —— 50TPS与秒杀分析!
1、50tps——5tps分析 50tps基本上已经满足了大部分中小型企业要求了 需求:期望我项目的接口,都要能满足50tps? 算 50tps:50 个事务每秒50 t/s 1分钟:50\*60s 3000 事务1小时 3000 \* 60 180000 事务 1小时要处理…...
【前端】如何计算首屏及白屏时间
文章目录 一、首屏时间二、白屏时间 一、首屏时间 白屏时间:页面渲染完所有内容的时间 简单点就是在<body> 标签后写js代码计算,但是不是很准确 <head><title>白屏时间</title> </head> <body></body> <s…...
重学SpringBoot3-ServletWebServerFactoryAutoConfiguration类
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-ServletWebServerFactoryAutoConfiguration类 工作原理关键组件以TomcatServletWebServerFactory为例ServletWebServerFactory会创建webServer的时机关键…...
FileZillaClient连接被拒绝,无法连接
1.ECONNREFUSED - 连接被服务器拒绝 2、无法连接FZ时,判断没有ssh 更新源列表: sudo apt-get update 安装 openssh-server :sudo apt-get install openssh-server 查看是否启动ssh:sudo ps -e | grep ssh...
每日一面——成员初始化列表、移动构造和拷贝构造
写前声明:参考链接 C面经、面试宝典 等 ✊✊✊每日一面——成员初始化列表、移动构造和拷贝构造 一、类成员初始化方式?构造函数的执行顺序?为什么用成员初始化列表会快一些?二、final和override关键字三、拷贝初始化和直接初始化…...
OPC UA 服务器的Web访问
基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站,它由浏览器,HTTP 服…...
docker 子网
当需要给容器分配指定 ip ,为避免ip 冲突,指定容器子网处理 创建 subnet 子网 docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 subnet-testdocker network ls NETWORK ID NAME DRIVER SCOPE ... f582ecf297bc sub…...
QT使用RabbitMQ
文章目录 1.RabbitMQ 客户端下载地址:1.1RabbitMQ基本结构:2.搭建RabbitMQ server3.安装步骤4.运行4.1 报错问题解决5.使用5.1 配置Web管理界面6.常用命令总结7.Qt客户端编译7.1 这里重点强调一下,这个文件需要改成静态库7.2 下载地址:(qamqp自己下载,下载成功后,静态编译…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
