zoukankan      html  css  js  c++  java
  • 数组中未出现的最小正整数

    给定一个无序数组arr,找到数组中未出现的最小正整数
    例如
    arr = [-1, 2, 3, 4]。返回1
    arr = [1, 2, 3, 4]。返回5
    arr = [6, 1, 2, 3, 4, 7]。返回5
    [要求]
    时间复杂度为O(n),空间复杂度为O(1)

    0 8 [33, 6, -1, -1, 1, 2, 3, 5]
    0 7 [5, 6, -1, -1, 1, 2, 3, 5]
    0 7 [1, 6, -1, -1, 5, 2, 3, 5]
    1 7 [1, 6, -1, -1, 5, 2, 3, 5]
    1 7 [1, 2, -1, -1, 5, 6, 3, 5]
    2 7 [1, 2, -1, -1, 5, 6, 3, 5]
    2 6 [1, 2, 3, -1, 5, 6, 3, 5]
    3 6 [1, 2, 3, -1, 5, 6, 3, 5]
    3 5 [1, 2, 3, 6, 5, 6, 3, 5]
    3 4 [1, 2, 3, 5, 5, 6, 3, 5]
    def solver(nums)
        left = 0
        right = len(nums)
        while(left < right):
            print(left,right,nums)
            if nums[left] == left + 1: #[1,2,3,...] 值和位置满足条件
                left+=1
            elif nums[left] <= left or nums[left] > right or nums[left] == nums[nums[left]-1]:  # 重复或者负数、大于right,
                right-=1
                nums[left] = nums[right]
            else:
                flag = nums[left] - 1
                nums[left], nums[flag] = nums[flag], nums[left]
        return left + 1
    
    
  • 相关阅读:
    Python格式化字符 %s %d %f
    FTP学习笔记
    万维网
    TCP笔记
    TCP流量控制
    笔记传输层
    传输层协议
    网络层
    以太网笔记
    计算机网络物理层
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13562428.html
Copyright © 2011-2022 走看看