如何判断数组前X个元素有序且最后一个元素为0?
如何灵活判断数组前X个元素有序且最后一个元素为0
核心需求拆解
要判断的数组需要同时满足两个条件:
- 数组的最后一个元素必须是0
- 除最后一个元素外,前面的所有元素是从1开始的连续递增序列(比如示例中的1到15,或是更短的1、2等)
灵活实现方案
以下是不依赖固定数组的通用判断函数,适配任意长度的符合条件的数组:
const isSortedWithZeroAtEnd = (array) => { // 空数组直接返回false if (array.length === 0) return false; // 检查最后一位是否为0 if (array[array.length - 1] !== 0) return false; // 遍历前n-1个元素,验证是否是1开始的连续递增序列 for (let i = 0; i < array.length - 1; i++) { if (array[i] !== i + 1) { return false; } } return true; };
逻辑说明
- 边界处理:空数组不满足任何条件,直接返回false;如果数组只有一个元素,那它必须是
[0]才会返回true - 末尾校验:先检查最后一位是否为0,不满足则直接返回false,减少不必要的遍历
- 连续递增校验:遍历前
length-1个元素,每个位置i的元素必须等于i+1,确保序列是1、2、3...的连续递增状态
测试用例验证
- 合法示例:
isSortedWithZeroAtEnd([1,2,3,...,15,0])→ 返回true - 短合法数组:
isSortedWithZeroAtEnd([1,2,0])→ 返回true;isSortedWithZeroAtEnd([0])→ 返回true - 非法情况:
- 末尾非0:
isSortedWithZeroAtEnd([1,2,3])→ 返回false - 前序元素不连续:
isSortedWithZeroAtEnd([1,3,0])→ 返回false - 前序元素顺序错误:
isSortedWithZeroAtEnd([2,1,0])→ 返回false
- 末尾非0:
对比原有实现的优势
原有代码通过固定数组的JSON字符串对比来判断,只能匹配特定长度和内容的数组。新实现则可以适配任意长度的符合规则的数组,灵活性和通用性更强。
内容的提问来源于stack exchange,提问作者AndyGUY
相关产品推荐
相关产品推荐

