美文网首页
41.First Missing Positive

41.First Missing Positive

作者: 0x2333 | 来源:发表于2018-10-27 23:43 被阅读0次

    41. First Missing Positive

    总结:找到一个无序的列表里<u>空缺的最小的正整数</u>

    解法:

    1.排序之后找最小正数

    描述: 对一个有序的列表,从最小的正整数1开始依次判断,看是否是空缺的数。遍历列表,只针对正数开始判断,如果该数小于列表中的数,那就是结果。如果该数等于列表中的数,那说明不是空缺的,该数+1,继续判断。不会出现该数大于列表中的数的情况。

    例子

            nums = sorted(nums)
            j = 1
            for i in nums:
                if i > 0:
                    if i > j:
                        break
                    j = i + 1
            return j
    

    2.把每个元素放置在“正确”的位置上。(适合找空缺的题)/循环替换

    中心思想:

    1,如果每个元素n 都放在正确的位置 index n-1 上,只需要从1开始到len(nums)遍历一遍,哪个index上的数字不对,这个index+1就是空缺的最小整数。

    2,并且空缺的最小正整数只会在“1,len(nums)+1”(极端情况下 [1,2]空缺是3)

    3.任何负数包括0和任何大于len(nums)的数不会对结果造成影响 ([-9999,1,2,3]空缺是4 [1,2,3,9999]结果是4)

    思路:

    循环替换,从第一个元素n开始,找到它应该放置的位置(index为n-1),将index n-1位置的元素放置到临时变量中,将n放置在该位置。再找临时变量中元素的正确位置,以此类推,当正确位置的index大于len(nums)-1,则跳过。当正确位置的index小于0,则跳过。遇上正确的元素也跳过。跳过之后,对下一个元素循环替换。

    例子

    for i, v in enumerate(nums):
        if i != v - 1:
            prev = v
            while (True):
                if prev - 1 < 0 or prev - 1 >= len(nums) or nums[prev - 1] == prev:
                    break
                t = nums[prev - 1]  # 因为数组下标也用到了prev python自带的交换变量方法会出错
                nums[prev - 1] = prev
                prev = t
    for n in range(len(nums)):
        if nums[n] != n + 1:
            return n + 1
    return len(nums)+1
    

    相关文章

      网友评论

          本文标题:41.First Missing Positive

          本文链接:https://www.haomeiwen.com/subject/dlhetqtx.html