非过滤,冒泡排序找缺失的第一个正数

来源:5-8 缺失的第一个正数(1)

_玲

2019-03-06

/**
 * 1. 从小到大排序(选择排序 | 冒泡排序)
 * 2. 判断当前值是否 > 0;
 * 3. 首个大于0的值,是否为1?不为1,则返回1;为1,继续
 * 4. 当前值与上一值的差是否 > 1,若大于1,则返回上一值 + 1
 * 5. 遍历结束,则返回最大值 + 1;
 */
export default (arr) => {
  let hadPInteger = false
  for (let i = 0, len = arr.length; i < len; i++) {
    for (let j = len - 1; j > i; j--) {
      if (arr[j] < arr[j - 1]) {
        [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
      }
    }
    if (arr[i] > 0 && !hadPInteger) {
      hadPInteger = true
      if (arr[i] === 1) {
        continue
      } else {
        return 1
      }
    } else if (hadPInteger) {
      if (arr[i] - arr[i - 1] === 1) {
        continue
      } else {
        return arr[i - 1] + 1
      }
    }
  }
  return arr.pop() + 1
}

测试用例同老师的…

写回答

1回答

快乐动起来呀

2019-03-06

没有通过测试用例,多算一个索引吧,同时问下想换工作吗,哈哈

0
3
东方既白233
测试用例是[1, 4, 3, 2, 5, 7],就测试不通过了,因为最后的索引没有比较到,需要加多判断 if (i === arr.length - 2 && arr[i + 1] - arr[i] > 1) { return arr[i] + 1; }
2019-05-08
共3条回复

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程