解决方案:
function findMissingPositive (arr) {
for (let i = 0, len = arr.length; i < len; i++) {
// 如果数组中的数字已经在它合理的位置,则i===arr[i]-1
// 每次while循环之后,arr[i]中的值有三种状态:1.已处于正确位置、2.负数、3. 值过大
while (arr[i] > 0 && arr[i] < arr.length && (arr[i] !== arr[arr[i] - 1])) {
let index = arr[i] - 1;
[arr[i], arr[index]] = [arr[index], arr[i]];
}
}
for (let i = 0, len = arr.length; i < len; i++) {
if (arr[i] !== i + 1) {
return i + 1;
}
}
return arr.length
}
思想:排序,但是又不是真正的排序,如果按照传统方案进行排序,则算法复杂度会升高,这里利用数组的索引与数组中值的对应关系来不断交换数组的值。针对寻求缺失数据的问题,也可以用这种方法解决