javascript中的逻辑增强练习,能用函数和for循环解决尽量不要投机取巧

img


既然是逻辑增强,能用for循环和函数解决就不要用投机取巧的方法,不能用正规表达式,理解好练习题意思再下手

这道题没人回答是正常的,因为不知道你想问什么

function firstMissingPositive(nums) {
  let n = nums.length;
  for (let i = 0; i < n; i++) {
    while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) 
      [nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]]; 
  }
  
  for (let i = 0; i < n; i++) {
    if (nums[i] != i + 1) return i + 1;
  }
  
  return n + 1;
}

console.log(firstMissingPositive([2, 3, 4]));   // 1
console.log(firstMissingPositive([1, 2, 3]));   // 4 
console.log(firstMissingPositive([8, 5, 7]));   // 6
console.log(firstMissingPositive([-3, -2, -1])); // 1
  1. 首先将数组中的正数放到与其值对应的索引位置上。例如将2放到索引1的位置,将3放到索引2的位置。
  2. 然后线性遍历数组,找到第一个与索引值不相等的元素,返回其索引值加1。
  3. 如果数组中所有的正数都放到了正确的索引位置,返回数组长度加1。