
2026-05-26:移除前缀使数组严格递增。用go语言,给定整数数组 nums,你可以从数组开头“删掉一段连续的前缀”(前缀长度可以为 0)。要求删除后剩下的部分必须是严格递增的(即剩余数组中任意相邻两项满足后者 > 前者)。在满足条件的前提下,返回“需要删除的前缀”的最小长度。
1 <= nums.length <= 100000。
-1000000000 <= nums[i] <= 1000000000。
输入: nums = [1,-1,2,3,3,4,5]。
输出: 4。
解释:
移除前缀 prefix = [1, -1, 2, 3] 后,剩余数组为 [3, 4, 5],严格递增。
题目来自力扣3818。
我们需要找到最短的需要删除的前缀长度,使得删除后剩余的数组是严格递增(后一个数 > 前一个数)。 核心思路:从后往前遍历数组,找到最长的、满足严格递增的后缀子数组,剩下的前面部分就是需要删除的最短前缀。
数组长度:7 数组元素索引:0:1,1:-1,2:2,3:3,4:3,5:4,6:5
遍历规则:从数组最后一个元素开始,向前逐个检查相邻两个元素是否满足严格递增(后一个 > 前一个),一旦发现不满足,立即确定结果。
遍历终止时,当前索引是 4,代码返回的值就是需要删除的前缀长度 = 4。
删除长度为4的前缀:移除索引0、1、2、3的元素 [1, -1, 2, 3]
剩余数组:[3, 4, 5],满足严格递增,且这是最短的删除长度。
n。O(1)。.
package main
import (
"fmt"
)
func minimumPrefixLength(nums []int) int {
for i := len(nums) - 1; i > 0; i-- {
if nums[i-1] >= nums[i] {
return i // 移除前缀 [0, i-1],长度为 i
}
}
return 0
}
func main() {
nums := []int{1, -1, 2, 3, 3, 4, 5}
result := minimumPrefixLength(nums)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def minimum_prefix_length(nums):
for i in range(len(nums) - 1, 0, -1):
if nums[i - 1] >= nums[i]:
return i # 移除前缀 [0, i-1],长度为 i
return 0
def main():
nums = [1, -1, 2, 3, 3, 4, 5]
result = minimum_prefix_length(nums)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
int minimumPrefixLength(const std::vector<int>& nums) {
for (int i = nums.size() - 1; i > 0; i--) {
if (nums[i - 1] >= nums[i]) {
return i; // 移除前缀 [0, i-1],长度为 i
}
}
return 0;
}
int main() {
std::vector<int> nums = {1, -1, 2, 3, 3, 4, 5};
int result = minimumPrefixLength(nums);
std::cout << result << std::endl;
return 0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·