缺失的第一个正数--python

缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

示例 1:
输入: [1,2,0]
输出: 3

示例 2:
输入: [3,4,-1,1]
输出: 2

示例 3:
输入: [7,8,9,11,12]
输出: 1

说明:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。

class Solution:
    # @param A, a list of integers
    # @return an integer
    def firstMissingPositive(self, A):
        i = 0
        while i < len(A):
            # 对于数组中的负数,不会影响题目的结果
            # 因为最小的正数是从1开始,则得到的结果不超过数组的长度,
            # 那么对于数组中所有大于数组长度的值,不会影响得到的结果
            # A[i] != A[A[i] - 1]如果当前的位置已经在正确的位置则跳过
            if A[i] > 0 and A[i] - 1 < len(A) and A[i] != A[A[i]-1]:
                # 将顺序颠倒的数字交换位置,并放在正确的位置上
                A[A[i]-1], A[i] = A[i], A[A[i]-1]
            else:
                i += 1
            # 最后得到的结果为1,2,3,4。。。
        # 如果结果做对比找到最小的数
        for i, integer in enumerate(A):
            if integer != i + 1:
                return i + 1
        return len(A) + 1

if __name__ == "__main__":
    print(Solution().firstMissingPositive([1,2,0]))
    print(Solution().firstMissingPositive([3,4,-1,1]))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容