Leetcode 2259. Remove Digit From Number to Maximize Result

news/2024/11/29 6:31:24/

题目

在这里插入图片描述

解法1:暴力搜索

note:c++中数字组成的字符串可以直接比较大小

class Solution {
public:string removeDigit(string number, char digit) {string max_res = "";for(int i=0;i<number.size();i++){char d = number[i];if(d != digit) continue;string new_num = number.substr(0,i) + number.substr(i+1);if(max_res == "" || new_num > max_res){max_res = new_num;}}return max_res;}
};

解法2:O(n)

这道题的关键在于看某个位置是否该被移除。假设number有n位,现在i位的数字与digit相同,考虑i位移除后的效果。首先对于这个number,不管移除哪一个,数字都会变成n-1位,假设移除不是i的右边的一个位置,那么i现在所在的位置不变。但是相应的如果移除i位,i+1的位置就会成为i之前所在的位置。所以如果i+1的位置数字大于i位的数字,则数字必定比移除其他位要大,则问题转化为:
从左向右便利,第一个number[i+1] > number[i]的位置即是我们寻找的答案,如果没有符合条件的情况,那么就应该移除跟digit相同的最右边的位置

class Solution {
public:string removeDigit(string number, char digit) {int right_most = 0;for(int i=0;i<number.size();i++){if(number[i] == digit){right_most = i;if(number[i] < number[i+1]){return number.substr(0,i) + number.substr(i+1);}}}return number.substr(0,right_most) + number.substr(right_most+1);}
};

http://www.ppmy.cn/news/535551.html

相关文章

c++编译错误:error C2259 能实例化抽象类

错误&#xff1a;error C2259 不能实例化抽象类 原因&#xff1a; 抽象类不能实例化&#xff0c;需要在派生类中实现基类所有定义的虚函数&#xff0c;只要有一个纯虚函数没有定义&#xff0c;那么在派生类还是抽象类。仍然不能实例化。 解决方法&#xff1a; 把父类的虚函…

JDK17 Spring-Security jxb 报错

jdk17 无法解决&#xff1a; java.security.PrivilegedActionException: null at java.base/java.security.AccessController.doPrivileged(AccessController.java:573) ~[na:na] Caused by: java.lang.NoSuchMethodException: sun.misc.Unsafe.defineClass(java.lang.Stri…

【leetcode】2259. 移除指定数字得到的最大结果(js实现)

1. 题目 2259. 移除指定数字得到的最大结果 2. 思路 根据题意进行模拟&#xff0c;每次找到与digit相同的元素就将其移除&#xff0c;将剩余的字符串与存储最大值的字符串进行比较&#xff0c;一直保持max中保存的是最大值&#xff0c;最终将max返回。 3. 代码 /*** para…

❤️2020年CSDN第一名何许人也❤️

❤️强烈推荐人工智能学习网站❤️ CSDN成就了一亿技术人&#xff0c;CSDN圈里都是技术人&#xff0c;故CSDN第一名格外受人关注们今天来看一下。 CSDN有个叫stpeace的&#xff0c;发现他几年霸榜CSDN第一名。 博客详细信息 原创2259篇&#xff0c;访问2224万&#xff0c;实力…

LeetCode 2259. 移除指定数字得到的最大结果

文章目录 1. 题目2. 解题 1. 题目 给你一个表示某个正整数的字符串 number 和一个字符 digit 。 从 number 中 恰好 移除 一个 等于 digit 的字符后&#xff0c;找出并返回按 十进制 表示 最大 的结果字符串。 生成的测试用例满足 digit 在 number 中出现至少一次。 示例 1&…

LeetCode笔记:Weekly Contest 291

LeetCode笔记&#xff1a;Weekly Contest 291 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现3. 算法优化 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-291/…

1839:【05NOIP提高组】谁拿了最多奖学金

1839&#xff1a;【05NOIP提高组】谁拿了最多奖学金 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5110 通过数: 2259 【题目描述】 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种&#xff0c;获取的条件各自不同&#xff1a; 1)院士奖学…

2079 11 21

一&#xff0c;将数字进行倒置 #include “stdio.h” void main() { int a[10]{3,6,12,25,30}; int size5; int i,j,t; for(i0,jsize-1;i<j;i,j–) { ta[i]; a[i]a[j]; a[j]t; } for(i0;i<size;i) { printf("%d ",a[i]); } } C语言程序是从源文件的第一条语句…