豆包MarsCode:小U的數字插入問題

問題描述

在這里插入圖片描述


問題分析

問題的核心是找到將數字 b 插入到數字 a 的某個位置后,使形成的數字盡可能大。需要仔細分析以下幾個要點:

1. 分析數字的特性

  • 輸入的兩個數字:
    • a 是一個正整數(例如 76543)。
    • b 是一個非負整數(例如 4)。
  • 目標
    b 插入 a 的某個位置后,獲得最大的數字。

2. 數字的插入方式

  • 數字插入可以通過 b 放在 a 的每兩個相鄰數字之間 來實現。
    • 例如,對于 a = 76543b = 4
      • 插入到開頭:476543
      • 插入到 7 和 6 之間:746543
      • 插入到 6 和 5 之間:765443
      • 插入到 5 和 4 之間:765453
      • 插入到末尾:765434
    • 按位置遍歷所有可能的插入結果,找到其中最大的數字。

3. 需要考慮的情況

Case 1: b 插入的最佳位置

插入后的數字大小取決于:

  • b 是否比當前數字大(例如 b = 4a = 76543,將 4 插在比它小的數字前可能獲得最大值)。
  • 必須比較插入前后數字的大小,確保選擇最大的。

Case 2: 邊界條件

  • a 的長度a 可以是任意正整數,單個數字(如 1)、多位數字(如 54321)都需要正確處理。
  • b = 0 的特殊情況
    • 插入 0 時,由于 0 的數值較小,可能需要插在數字的末尾(除非插在較小的數字后可以形成更大的結果)。
    • 例如 a = 1, b = 0,正確結果為 10

Case 3: 插入到字符串的末尾

插入的位置還包括 末尾,即需要遍歷的插入點包括從第 0 位到最后一位(length + 1 次嘗試)。

4. 如何實現

  1. 將數字轉換為字符串:便于操作每個插入點。
  2. 生成每個插入結果:遍歷可能的插入位置,將 b 插入到 a 的字符串中,形成一個新的字符串。
  3. 比較最大值:在遍歷過程中,比較所有生成的結果,保留其中的最大值。
  4. 返回結果:最后輸出最大值。

5. 示例分析

示例 1:

輸入:a = 76543, b = 4

插入操作:

  • 插入到第 0 位:476543
  • 插入到第 1 位:746543
  • 插入到第 2 位:765443 (最大)
  • 插入到第 3 位:765453
  • 插入到末尾:765434

最大結果:765443

示例 2:

輸入:a = 1, b = 0

插入操作:

  • 插入到第 0 位:01(等價于 10
  • 插入到末尾:10

最大結果:10

6. 問題解決的關鍵

  • 明確數字插入的每一種可能性。
  • 在每個可能性中,選擇能構成最大值的結果。
  • 注意邊界條件(例如 b = 0,或 a 為單個數字時的處理)。

參考代碼(Java)

public class Main {public static int solution(int a, int b) {// 將整數a轉換為字符串以便操作String aStr = String.valueOf(a);String bStr = String.valueOf(b);// 初始化最大結果String maxResult = "";// 遍歷a的每個插入位置for (int i = 0; i <= aStr.length(); i++) {// 在第i位置插入bString current = aStr.substring(0, i) + bStr + aStr.substring(i);// 更新最大值if (maxResult.isEmpty() || Integer.parseInt(current) > Integer.parseInt(maxResult)) {maxResult = current;}}// 返回結果轉換為整數return Integer.parseInt(maxResult);}public static void main(String[] args) {System.out.println(solution(76543, 4) == 765443); System.out.println(solution(1, 0) == 10);         System.out.println(solution(44, 5) == 544);       System.out.println(solution(666, 6) == 6666);     }
}

代碼分析

solution 方法分析

1. 輸入處理
String aStr = String.valueOf(a);
String bStr = String.valueOf(b);
  • 目的:將輸入的整數 ab 轉換為字符串。
  • 原因:便于操作字符串中的每一位數字,同時允許插入操作變得簡單。
  • 例如:a = 76543 被轉換為 "76543"b = 4 被轉換為 "4"
2. 最大值初始化
String maxResult = "";
  • 初始化最大結果為空字符串。
  • 之后通過比較插入結果,不斷更新 maxResult
3. 遍歷插入位置
for (int i = 0; i <= aStr.length(); i++) {String current = aStr.substring(0, i) + bStr + aStr.substring(i);...
}
  • 遍歷范圍:從 i = 0i = aStr.length(),共 length + 1 次循環。
    • 例如,對于 "76543""4"
      • 插入到第 0 位(開頭):476543
      • 插入到第 1 位:746543
      • 插入到第 2 位:765443
      • 插入到第 3 位:765453
      • 插入到末尾:765434
  • 字符串操作
    • aStr.substring(0, i):獲取從起始位置到第 i 位之前的字符串。
    • bStr:將 b 插入當前位置。
    • aStr.substring(i):獲取從第 i 位到字符串末尾的內容。
    • 最終拼接生成插入后的新字符串。
4. 比較最大值
if (maxResult.isEmpty() || Integer.parseInt(current) > Integer.parseInt(maxResult)) {maxResult = current;
}
  • maxResult.isEmpty():初次循環時,直接將第一個結果作為初始值。
  • Integer.parseInt:將字符串 current 轉換為整數,便于數值大小比較。
  • 更新最大值:如果當前插入結果比之前的最大值大,則更新 maxResult
5. 返回結果
return Integer.parseInt(maxResult);
  • 最后將字符串形式的最大值 maxResult 轉換為整數并返回。

代碼性能分析

  1. 時間復雜度
    • 遍歷插入點需要 O(n) 次操作(na 的位數)。
    • 每次插入后比較大小需要將字符串轉換為整數(O(k)k 為插入后字符串的位數)。
    • 總時間復雜度O(n * k)
  2. 空間復雜度
    • aStrbStr 占用 O(n + 1) 的空間(na 的長度,1b 的長度)。
    • 中間字符串 current 也占用 O(n + 1) 的空間。
    • 總空間復雜度O(n)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63770.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雅思真題短語梳理(八)

126員工流動率高 high staff turnover 127(多)負擔一些工作任務 cover some duties / an increased workload 128不滿 feel upset and resentful 129偏向性待遇 preferential treatment 130介入幫忙 step in and help 131切實的好處 tangible benefits 132挽留 staff retention…

【Cadence射頻仿真學習筆記】IC設計中電感的分析、建模與繪制(EMX電磁仿真,RFIC-GPT生成無源器件及與cadence的交互)

一、理論講解 1. 電感設計的兩個角度 電感的設計可以從兩個角度考慮&#xff0c;一個是外部特性&#xff0c;一個是內部特性。外部特性就是把電感視為一個黑盒子&#xff0c;帶有兩個端子&#xff0c;如果帶有抽頭的電感就有三個端子&#xff0c;需要去考慮其電感值、Q值和自…

基礎元器件的學習

1、二極管 1.1二極管的符號 ZD是穩壓二極管 VD、V、D是普通二極管的符號。 1.2二極管的反向恢復時間 首先交流電為上正下負&#xff0c;然后下正上負。當二極管接到反向電壓&#xff0c;二極管存在寄生電容&#xff0c;電壓不能立刻突變&#xff0c;當輸入頻率變高時&#…

EdgeX物聯網平臺

一、概述 EdgeX Foundry是一個由Linux基金會支持的邊緣計算開源平臺。它的定位是作為通用工業物聯網邊緣計算通用框架,部署在路由器和交換機等邊緣設備上。EdgeX Foundry為各種傳感器、設備或其他物聯網器件提供即插即用功能,并管理它們,進一步收集和分析它們的數據,或者導…

基于小樣本學習的自然場景圖像中茶葉病害識別技術綜述

基于小樣本學習的自然場景圖像中茶葉病害識別技術綜述 引言 茶葉作為全球廣泛消費的飲品之一&#xff0c;其產量和品質直接關系到茶農的經濟收益。然而&#xff0c;茶樹在生長過程中容易受到多種病害的侵染&#xff0c;這些病害不僅影響茶葉的產量和品質&#xff0c;還給茶農…

Linux之幫助命令

一、man幫助命令 語法&#xff1a; man 你要查找的命令例如&#xff1a;man ls 即可得到你要的命令說明&#xff0c;按q退出 二、內置命令和外部命令 一部分基礎功能的系統命令是直接內嵌在shel中的&#xff0c;系統加載啟動之后會隨著shll一起加載&#xff0c;常駐系統內存中…

MONI后臺管理系統-swagger3(springdoc-openapi)集成

springdoc-openapi Java 庫有助于使用 Spring Boot 項目自動生成 API 文檔。springdoc-openapi 通過在運行時檢查應用程序來根據 Spring 配置、類結構和各種注釋推斷 API 語義。 該庫會自動生成 JSON/YAML 和 HTML 格式的頁面文檔。生成的文檔可以使用swagger-api注釋進行補充。…

GFPS擴展技術原理(七)-音頻切換消息流

音頻切換消息流 Seeker和Provider通過消息流來同步音頻切換能力&#xff0c;觸發連接做切換&#xff0c;獲取或設置音頻切換偏好&#xff0c;通知連接狀態等等。為此專門定義了音頻切換消息流Message Group 為0x07&#xff0c;Message codes如下&#xff1a; MAC of Audio s…

LiteFlow決策系統的策略模式,順序、最壞、投票、權重

個人博客&#xff1a;無奈何楊&#xff08;wnhyang&#xff09; 個人語雀&#xff1a;wnhyang 共享語雀&#xff1a;在線知識共享 Github&#xff1a;wnhyang - Overview 想必大家都有聽過或做過職業和性格測試吧&#xff0c;尤其是現在的畢業生&#xff0c;在投了簡歷之后經…

【計算機視覺基礎CV-圖像分類】02-入門詳解圖像分類、經典數據集、比賽與冠軍圖像模型演進史

前言 圖像分類&#xff08;Image Classification&#xff09;是計算機視覺&#xff08;Computer Vision&#xff09;中一項基礎且核心的任務。簡單來說&#xff0c;就是讓計算機從給定的類別集合中&#xff0c;為一張輸入圖片分配一個正確的類別標簽。這個過程聽起來直觀&…

三子棋游戲(基礎版)

我們用 C 語言代碼實現了一個簡單的控制臺版三子棋游戲&#xff0c;代碼分為三個部分&#xff0c;分別是頭文件game.h中定義的函數聲明以及兩個源文件game.c和test.c、game.c文件。 1.頭文件&#xff08;game.h&#xff09;部分 首先包含了<stdio.h>&#xff08;用于標…

使用Chat-LangChain模塊創建一個與用戶交流的機器人

當然&#xff01;要使用Chat-LangChain模塊創建一個與用戶交流的機器人&#xff0c;你需要安裝并配置一些Python庫。以下是一個基本的步驟指南和示例代碼&#xff0c;幫助你快速上手。 安裝依賴庫 首先&#xff0c;你需要安裝langchain庫&#xff0c;它是一個高級框架&#x…

嵌入式驅動開發詳解20(IIO驅動架構)

文章目錄 前言IIO子系統簡介主要結構體主要API函數 IIO子系統實現SPI框架IIO框架IIO通道詳解通道結構體分析通道命名分析icm20608設備通道實現 讀取函數寫入函數 測試測試效果命令行讀取應用程序讀取 后續參考文獻 前言 IIO 全稱是 Industrial I/O&#xff0c;翻譯過來就是工業…

Linux 網絡維護相關命令簡介

目錄 零. 概要一. ping二. ip命令2.1 ip address2.2 ip route2.3 ip neighbour 三. traceroute四. DNS查詢4.1 nslookup4.2 dig 五. ss 查看網絡連接狀態 零. 概要 ?在Linux系統中有2套用于網絡管理的工具集 net-tools 早期網絡管理的主要工具集&#xff0c;缺乏對 IPv6、網…

Jenkins持續集成部署——jenkins安裝

前言 Jenkins 是一個開源的自動化服務器&#xff0c;主要用于持續集成&#xff08;CI&#xff09;和持續交付&#xff08;CD&#xff09;。它為軟件開發團隊提供了一個易于使用的平臺來自動化構建、測試和部署應用程序的過程。 Jenkins 主要功能 1. 持續集成 (CI) 自動構建…

PYG - Cora數據集加載 (自動加載+手動實現)

本文從Cora的例子來展示PYG如何加載圖數據集。 Cora 是一個小型的有標注的圖數據集&#xff0c;包含以下內容&#xff1a; data.x&#xff1a;2708 個節點&#xff08;即 2708 篇論文&#xff09;&#xff0c;每個節點有 1433 個特征&#xff0c;形狀為 (2708, 1433)。data.ed…

《 火星人 》

題目描述 人類終于登上了火星的土地并且見到了神秘的火星人。人類和火星人都無法理解對方的語言&#xff0c;但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的&#xff0c;首先&#xff0c;火星人把一個非常大的數字告訴人類科學家&#xff0c;科學家破解這…

機器學習基礎算法 (二)-邏輯回歸

python 環境的配置參考 從零開始&#xff1a;Python 環境搭建與工具配置 邏輯回歸是一種用于解決二分類問題的機器學習算法&#xff0c;它可以預測輸入數據屬于某個類別的概率。本文將詳細介紹邏輯回歸的原理、Python 實現、模型評估和調優&#xff0c;并結合垃圾郵件分類案例進…

BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測(多輸入單輸出)

Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09; 目錄 Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09;分類效果基本描述…

云備份項目--工具類編寫

4. 文件工具類的設計 4.1 整體的類 該類實現對文件進行操作 FileUtil.hpp如下 /* 該類實現對文件進行操作 */ #pragma once #include <iostream> #include <string> #include <fstream> #include <vector> #include <sys/types.h> #include …