插入后的最大值
难度:
标签:
题目描述
代码结果
运行时间: 51 ms, 内存: 16.7 MB
/*
* 思路:
* 1. 使用Java Stream API实现类似的逻辑。
* 2. 首先判断是正数还是负数,根据情况决定插入的位置。
* 3. 使用Stream的操作处理字符串的拼接。
*/
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Solution {
public String maxValue(String n, int x) {
boolean isNegative = n.charAt(0) == '-';
int len = n.length();
int index = IntStream.range(isNegative ? 1 : 0, len)
.filter(i -> (isNegative && n.charAt(i) - '0' > x) ||
(!isNegative && n.charAt(i) - '0' < x))
.findFirst().orElse(len);
return IntStream.range(0, len + 1)
.mapToObj(i -> i == index ? String.valueOf(x) : (i < index ? String.valueOf(n.charAt(i)) : String.valueOf(n.charAt(i - 1))))
.collect(Collectors.joining());
}
}
解释
方法:
题解的核心思路是根据整数n的正负性来决定x的插入位置。如果n是正数,为了使得n的数值最大,x应该被插入到n中第一个比x小的数字之前;如果n是负数,则x应该被插入到n中第一个比x大的数字之前。这样可以确保在保持数字正负性的前提下,n的绝对值尽可能大。特别地,如果遍历完n都没有找到合适的插入位置,则直接将x插入到n的末尾。
时间复杂度:
O(m)
空间复杂度:
O(m)
代码细节讲解
🦆
题解为什么选择在正数中找到第一个小于x的数字前插入,而在负数中找到第一个大于x的数字前插入?这样的处理方式如何确保数值最大化?
▷🦆
对于正数n,如果x比n中所有数字都大,题解建议将x插入到末尾。这种做法是如何确保结果是最大的?
▷🦆
在处理负数时,如果所有数字都小于x,题解同样推荐将x添加到末尾。请问这种情况下这样做是否总是最优?
▷🦆
在负数的处理逻辑中,题解从索引1开始遍历,这里为什么跳过了索引0,即负号?
▷