【备战秋招】每日一题:5月13日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/17 16:50:16

 为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-塔子哥的数字

在线评测链接:P1286

题目描述

塔子哥是一个数学爱好者,他经常思考各种数字之间的奥秘。今天,他想要解决一个有趣的问题:如何在一个数字中插入一个数字,以得到最大的结果?

他发现这个问题很有挑战性,因为他必须找到一种方法,能够在给定的数字中插入一个数字,使得插入后的结果最大。于是,他开始思考并设计了一种算法来解决这个问题。

算法的核心思想是:首先将第一个数字转化为字符串,然后将第二个数字插入到字符串的不同位置,得到多个可能的结果。最后,从中选择最大的一个数字作为最终的结果。

塔子哥已经写好了这个算法,并请你帮忙测试一下。请编写一个程序,输入塔子哥手上的两个数字,输出插入后得到的最大数字。(前导零正常输出)

输入描述

输入第一行为一个数字T,表示有T组测试样例

接下来的T行对于每一组数据,包含一行有 2个空格隔开的整数,表示任意正整数 a 和待插入的数字 b,

1 \leq T \leq 10, 1 \leq a \leq 10 ^{50000} , 0 \leq b \leq 9

输出描述

对于每组数据,输出一行,包括一个整数,得到最大的整数。

样例

输入

5
123456 8
58264 2
44 5
10086 0
8 0

输出

8123456
582642
544
100860
80

思路

贪心

插入一个数字后,其代替原有位置的数,要使得新的数的值越大。

原数 a 的长度为 n ,数的索引从 1 开始,假设插入的位置为 k,即插入后,组成为:[1, k] + number + [k, n]

数 number 有两种插入的位置:

  • 一种是在 [1, n] 这些位置之前

  • 一种是在最后一个位置 n 之后

考虑如何选择这两种位置:

  • 如果 number 不比 s[1, n] 中的任意一个数大,那么其放在最后即可。

  • 如果 number 比 s[1, n] 中至少一个数大,那么就可以放在这些数前面,如何选择?

    找到 s[i] < number 的最小的 i ,将 number 插在 s[i] 前面。这么选择是因为越靠前的位权值越大,如 12345 中 1 是万位,2 是千位,3 是百位,2 是十位,1 是个位,所以 number 插入在 s[i] 前面,这个 i 越小,插入后 number 给整个新的数增加的值就越大。

时间复杂度:O(n)

类似题目推荐

LeetCode

  1. 402. 移掉 K 位数字

Codefun2000

美团还是挺喜欢考贪心的,但是大部分是简单贪心吧,如下所示

  1. P1137 美团 2023.04.01-第一题-整理

  2. P1077 美团 2023.3.11-第一题-字符串修改

  3. P1024 百度 2022.9.13-01反转

  4. P1235. 美团 2023.04.15-实习-第一题-字符串前缀

  5. P1089 美团 2023.3.18.10点-第三题-塔子哥的回文串

代码

CPP

#include <bits/stdc++.h>
using namespace std;
​
void solve() {
    string a;
    int b;
​
    cin >> a >> b;
​
    for (int i = 0; i < a.size(); ++i) {
        // 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
        if (a[i] < (b + '0')) {
            cout << a.substr(0, i) + to_string(b) + a.substr(i) << "\n";
            return ;
        }
    }
​
    // 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
    cout << a + to_string(b) << "\n";
}
​
int main()
{
    int T;
    cin >> T;
    while (T--) solve();
​
    return 0;
}

python

def solve():
    a, b = input().split()
    for i in range(len(a)):
        # 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
        if a[i] < str(b):
            print(a[:i] + str(b) + a[i:])
            return
​
    # 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
    print(a + str(b))
​
​
T = int(input())
for _ in range(T):
    solve()
​

Java

import java.util.Scanner;
​
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
​
        int T = scanner.nextInt();
        while (T-- > 0) {
            String a = scanner.next();
            int b = scanner.nextInt();
​
            for (int i = 0; i < a.length(); i++) {
                // 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
                if (a.charAt(i) < (b + '0')) {
                    System.out.println(a.substring(0, i) + b + a.substring(i));
                    break;
                }
​
                // 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
                if (i == a.length() - 1) {
                    System.out.println(a + b);
                }
            }
        }
    }
}

Go

package main
​
import (
    "fmt"
    "strconv"
)
​
func solve() {
    var a string
    var b int
​
    fmt.Scan(&a, &b)
​
    for i := 0; i < len(a); i++ {
        // 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
        if a[i] < byte(b+'0') {
            fmt.Println(a[:i] + strconv.Itoa(b) + a[i:])
            return
        }
    }
​
    // 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
    fmt.Println(a + strconv.Itoa(b))
}
​
func main() {
    var T int
    fmt.Scan(&T)
    for T > 0 {
        solve()
        T--
    }
}

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
    input += data;
    return;
});
process.stdin.on('end', () => {
    const lines = input.trim().split('\n');
    let T = parseInt(lines[0]);
​
    for (let i = 1; i <= T; i++) {
        let [a, b] = lines[i].trim().split(" ");
​
        for (let j = 0; j < a.length; j++) {
            // 从小到大枚举,一旦找到一个小于 b 的数字,就将 b 插入在其之前
            if (a[j] < b) {
                console.log(a.substring(0, j) + b + a.substring(j));
                break;
            }
​
            // 如果 b 小于 a 中所有数字,就将 b 插入到所有数之后即可。
            if (j === a.length - 1) {
                console.log(a + b);
            }
        }
    }
});

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

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

相关文章

业务流程自动化:ThinkAutomation Professional Crack

ThinkAutomation 助力您的业务流程自动化。自动执行本地和基于云的业务流程&#xff0c;以降低成本并节省时间。 自动化传入的通信渠道&#xff0c;监控数据库&#xff0c;对传入的Webhook&#xff0c;Web表单和聊天机器人做出反应。处理文档、附件、本地文件和其他邮件源。 …

TOGAF10®标准中文版(全文目录)

The Open Group是一个通过技术标准实现业务目标的全球联盟。我们拥有超过870个成员组织&#xff0c;成员来自技术社区的各个部门&#xff0c;包括客户、系统和解决方案供应商、工具供应商、集成商和顾问&#xff0c;以及学者和研究人员。 The Open Group的使命是通过以下方式…

33、js - 面试 - 事件循环 微任务 宏任务

1、事件循环♻️&#xff08;EventLoop&#xff09; js是单线程语言&#xff0c;也就是某一刻只能执行一行代码&#xff0c;为了让耗时代码不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环是一个并发模型&#xff0c;负责执行代码、收集异步任务的模型&#xff0…

web性能检测工具lighthouse

About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页面的性能。 你可以以多种方式使用它。 浏览器插件 作为浏览器插件&#xff0c;访问chrome网上商店 搜索Lighthouse 插件安装。以两种方式使用。 方式一 安装…

单片机按键软开关:1个引脚实现单片机低电量自己控制给自己断电

背景 类似于手机的开机按键&#xff0c;我们希望在单片机电路上也能实现类似的低电量自动关机、通过按键而不是自锁开关来上电开机。 软开关电路 电路图如下&#xff1a; 当按键按下时&#xff0c;Q1导通&#xff0c;R18右侧变为低电平&#xff0c;进而Q2导通&#xff0c;…

深入探究kubernetes resources - Part 1

在开始使用 Kubernetes 时&#xff0c;社区教给我们的第一件事就是始终为我们 pod 中的每个容器设置 CPU 和内存的请求和限制。 当您指定 Pod 时&#xff0c;您可以选择指定容器需要多少资源。 您指定的最常见资源是 CPU 和内存 (RAM)&#xff1b; apiVersion: v1 kind: Pod …

模糊测试不“模糊”,高效发掘未知漏洞与 0day 攻击

近日&#xff0c;在「DevSecOps软件安全开发实践」课程上&#xff0c;极狐(GitLab) 高级测试工程师衡韬、极狐(GitLab) 高级后端开发工程师田鲁&#xff0c;分享了模糊测试的概念、必要性和在极狐GitLab 上的实践。 以下内容整理自本次直播&#xff0c;你也可以点击&#x1f44…

合宙Air724UG Cat.1模块硬件设计指南--SIM卡接口

SIM卡接口 简介 SIM( Subscriber Identity Module)卡为用户识别模块&#xff0c;内部使用新式单片机及存储器管理结构&#xff0c;包含了大规模的集成电路&#xff0c;同时也称为用户识别卡。通信设备通过SIM卡来识别其用户&#xff0c;只有设备插入SIM卡后才能入网使用。SIM卡…

Javac编译原理:基本结构和工作原理

Javac编译器 文章目录 Javac编译器简介基本结构如何编译程序 工作原理词法分析器语法分析器语义分析器代码生成器 简介 javac是一种编译器&#xff0c;能将一种语言规范转化成另一种语言规范 编译器通常是将便于人理解的语言规范转换成容易理解的语言规范&#xff0c;如C都是…

阿里云服务器价格如何?与其他云服务提供商的价格对比如何?

阿里云服务器价格如何&#xff1f;与其他云服务提供商的价格对比如何&#xff1f;   阿里云服务器价格概述   作为全球领先的云计算服务提供商&#xff0c;阿里云在确保服务器性能和安全性的同时&#xff0c;也非常注重产品的价格竞争力。阿里云服务器&#xff08;ECS&…

OpenMMLab-AI实战营第二期——6-2.玩转AIGC神器MMagic

文章目录 1. 基本介绍2. 动手实验 视频链接&#xff1a;玩转AIGC神器MMagic 代码教程&#xff1a;https://github.com/TommyZihao/MMagic_Tutorials 1. 基本介绍 Stable Diffusion的文生图&#xff0c;以及controlnet和dreamboost的图生图&#xff08;输入一个图像文字描述&am…

python Django web 项目 联通用户管理系统

文章目录 1框架MVC 介绍Django 框架的介绍基础命令Django处理浏览器的请求的流程 部门表部门表显示7.模板的继承部门表的添加部门表的删除request.POST.get(‘key’) 、 request.GET.get(key, )部门表的编辑filter() 得到可迭代的QuerySet对象,支持for循环取容器内的元素first(…

图神经网络 GNN 入门

参考链接 A Gentle Introduction to Graph Neural Networks (distill.pub) 零基础多图详解图神经网络&#xff08;GNN/GCN&#xff09;【论文精读】_哔哩哔哩_bilibili 目录 图的基本构成 图的表示方法 图的示例 图网络的基本任务 图网络的处理 影响图网络效果的超参数 …

机器人参数化建模与仿真,软体机器人

专题一&#xff1a;机器人参数化建模与仿真分析、优化设计专题课程大纲 机器人建模基础 机器人运动学基础几何运动学闭环解解析法建模运动学MATLAB脚本文件编写&#xff08;封闭解、构型绘制&#xff09;、工具箱机器人工作空间&#xff08;离散法、几何法&#xff09;建模工作…

客户自助服务第一步:在线客服、在线帮助中心

随着互联网的快速发展&#xff0c;越来越多的企业开始重视客户体验&#xff0c;不断提升客户服务水平。其中&#xff0c;客户自助服务是提高客户满意度的重要途径之一。本文将从在线客服和在线帮助中心两个方面介绍。 客户自助服务的第一步 一、在线客服 在线客服是指企业通…

【linux】探索Linux命令行中强大的网络工具:netstat

文章目录 前言一、netstat是什么&#xff1f;二、使用方法1.常用参数2.实例演示3.更多功能 总结 前言 在Linux命令行中&#xff0c;有许多实用的工具可帮助我们管理和监控网络连接。其中一个最重要的工具就是netstat&#xff0c;它提供了丰富的网络连接和统计信息&#xff0c;…

怎么压缩PDF文件,这三个方便帮你一键压缩!

PDF文件是一种广受欢迎的版式文件格式&#xff0c;由Adobe公司发明&#xff0c;具有高度的兼容性&#xff0c;无论在不同的软件和设备中打开&#xff0c;都不会影响页面的排版。如今&#xff0c;人们常常上网搜索并下载需要的资料&#xff0c;例如电子书和PPT模板&#xff0c;这…

合宙Air724UG Cat.1模块硬件设计指南--USB接口

USB接口 简介 USB (Universal Serial Bus&#xff0c;通用串行总线) 是一种新兴的并逐渐取代其他接口标准的数据通信方式&#xff0c;自推出以来&#xff0c;已成功替代串口和并口&#xff0c;成为21世纪大量计算机和智能设备的标准扩展接口和必备接口之一&#xff0c;USB 具有…

HarmonyOS学习路之开发篇—Java UI框架(JS FA调用Java PA)

JS FA调用Java PA机制 使用兼容JS的类Web开发范式的方舟开发框架提供了JS FA&#xff08;Feature Ability&#xff09;调用Java PA&#xff08;Particle Ability&#xff09;的机制&#xff0c;该机制提供了一种通道来传递方法调用、处理数据返回以及订阅事件上。 当前提供Ab…

从零开发短视频电商 Jmeter插件安装和常用插件

Jmeter插件安装和常用插件 插件安装方式 一种是手动安装各种插件&#xff0c;下载对应的jar包&#xff0c;放到lib\ext目录下就可以使用了。另一种是通过漂亮的 UI &#xff0c;jmeter 插件管理器Plugins Manager可以方便的管理其他插件的下载和更新。安装一次插件管理器&…