请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

/**
 * 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
}

测试用例同老师的…

正在回答 回答被采纳积分+3

1回答

快乐动起来呀 2019-03-06 22:37:55

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

0 回复 有任何疑惑可以回复我~
  • 提问者 _玲 #1
    老师好看得起我,我对自己没信心。
    
    近水楼台,是不是可以免费学习了,哈哈。
    
    很有吸引力。
    回复 有任何疑惑可以回复我~ 2019-03-06 22:42:02
  • 提问者 _玲 #2
    咦,老师的测试用例我试着都跑通了呢……
    回复 有任何疑惑可以回复我~ 2019-03-06 22:53:29
  • 测试用例是[1, 4, 3, 2, 5, 7],就测试不通过了,因为最后的索引没有比较到,需要加多判断    
    
      if (i === arr.length - 2 && arr[i + 1] - arr[i] > 1) {
            return arr[i] + 1;
          }
    回复 有任何疑惑可以回复我~ 2019-05-08 22:27:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信