首页 > 编程语言 >LeetCode每日一题[C++]-2864.最大二进制奇数(贪心)

LeetCode每日一题[C++]-2864.最大二进制奇数(贪心)

时间:2024-03-13 09:04:20浏览次数:28  
标签:cnt 2864 string 奇数 二进制 复杂度 C++ 字符串 LeetCode

题目描述

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

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 100
  • s 仅由 '0' 和 '1' 组成
  • s 中至少包含一个 '1'

解题思路

        题目给定二进制字符串 s构造字典序最大的二进制奇数,根据定义可以知道字符串中每一位要么为 0,要么为 1。由于构造的数必须为奇数,则最低位必须为 1,因此我们从字符串 s 中选择一个 1 放置到最低位。按照贪心原则,其余的 1全部放在最高位,剩余的 0 放在剩下的位即可,直接构造目标字符串返回即可。

复杂度分析

时间复杂度:O(n),其中 n 表示给定字符串的长度。只需要遍历一遍字符串即可。

空间复杂度:O(1),除返回值外不需要额外的空间。

代码

#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
    string maximumOddBinaryNumber(string s) {
        int cnt = 0;
        for (size_t i = 0; i < s.length(); i++)
        {
            if (s[i] == '1')
            {
                cnt++;
            }
            
        }
        return string(cnt - 1, '1') + string(s.length() - cnt, '0') + '1';
    }
};
int main()
{
    Solution solution;
    string s = "010";
    string res = solution.maximumOddBinaryNumber(s);
    cout << res << endl;

    s = "0101";
    res = solution.maximumOddBinaryNumber(s);
    cout << res << endl;
}

标签:cnt,2864,string,奇数,二进制,复杂度,C++,字符串,LeetCode
From: https://blog.csdn.net/qq_40102160/article/details/136669259

相关文章

  • c++基础语法
    文章目录前言命名空间命名空间的使用缺省参数缺省参数的使用函数重载函数重载的作用函数重载的使用函数重载原理引用引用的使用引用的使用场景引用和指针externCinlineauto范围fornullptr前言大家好我是jiantaoyab,这篇文章给大家带来的是c语言没有的一些特性之......
  • c++初阶------类和对象(下)
    作者前言......
  • LeetCode题练习与总结:最长有效括号
    一、题目给你一个只包含'(' 和')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。二、解题思路1.初始化一个栈和一个变量maxLen来记录最长有效括号子串的长度。栈用于存储左括号的索引,maxLen初始化为0。2.遍历字符串s中的每个字符。对于每个字符,执行以下......
  • Windows下使用winsock库实现tcp客户端通信,C/C++
    编程思路第一步创建一个WASDATA结构体变量,用于存储关于Winsock库的信息;初始化Winsock库。第二步创建TCP套接字。第三步创建sockaddr_in结构体变量,用于储存服务器地址信息。里面包括设置地址族、IP地址、端口号。第四步调用connect函数连接服务器。通信调send函数发送数......
  • 第十四届蓝桥杯C++B组编程题题目以及题解
    a.冶炼金属(二分)思路:设任意一条冶炼记录投入金属数量为a,产出金属为b.对于每一条冶炼记录我们都可以得到一个转换率V的范围:b<=a/v<b+1即a/b<=v<a/(b+1)为什么是b+1呢?因为既然能产出b个金属,也就意味着一定不能产出b+1个,所以a/v<b+1每一条记录都可以得到v的一个区间,我......
  • [LeetCode][LCR174] 寻找二叉搜索树中的目标节点
    题目LCR174.寻找二叉搜索树中的目标节点某公司组织架构以二叉搜索树形式记录,节点值为处于该职位的员工编号。请返回第cnt大的员工编号。示例1:输入:root=[7,3,9,1,5],cnt=27/\39/\15输出:7示例2:输......
  • C++虚继承
    虚继承(VirtualInheritance)为了解决多继承时的命名冲突和冗余数据问题,c++提出了虚继承,使得在派生类中只保留一份间接基类的成员。在继承方式前面加上 virtual 关键字就是虚继承虚继承的目的是让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类(Virtual......
  • 命令行 要查看在Windows上已安装的所有.NET Framework版本 查看在Windows上已安装的
       要查看在Windows上已安装的所有.NETFramework版本,可以按照以下步骤执行:打开命令提示符(CommandPrompt)或PowerShell。可以通过在Windows搜索栏中键入“cmd”或“PowerShell”来找到并打开这些应用程序。在命令提示符或PowerShell中,输入以下命令并按Enter键:......
  • 代码随想录算法训练营day21 | leetcode 530. 二叉搜索树的最小绝对差、501. 二叉搜索
    目录题目链接:530.二叉搜索树的最小绝对差-简单题目链接:501.二叉搜索树中的众数-简单题目链接:236.二叉树的最近公共祖先-中等题目链接:530.二叉搜索树的最小绝对差-简单题目描述:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,......
  • 【C++】string类(介绍、常用接口)
    ......