[Leetcode][Python]41: First Missing Positive

來源:互聯網
上載者:User

標籤:

# -*- coding: utf8 -*-
‘‘‘
__author__ = ‘[email protected]‘

41: First Missing Positive
https://oj.leetcode.com/problems/first-missing-positive/

Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.

===Comments by Dabay===
要求O(n)的時間,肯定不能常規排序,意思是只能掃描一次。
因為對空間有要求,所以只能在已經有的空間上做文章。

掃描的時候,當遇到正數,而且這個正數小於數組長度(因為如果大於數組長度,說明前面肯定缺少正數,同時也沒有(無需)位置來儲存它),
就把它交換到下標和它一樣的位置上。
這樣,掃描完成之後,從1的位置開始判斷,如果位置k上存的數字不是k,這就是缺少的第一個正數。

這道題有三個需要注意的地方:
- 交換之後,下標不能移動,需要繼續判斷。
- 可能從1開始到最後都沒有缺少的正數,此時下一個正數可能放在第一個位置上。
- 當數組長度為0時,直接返回1.
‘‘‘

class Solution:
# @param A, a list of integers
# @return an integer
def firstMissingPositive(self, A):
if len(A) == 0:
return 1
i = 0
while i < len(A):
if A[i] > 0 and A[i] < len(A) and A[A[i]] != A[i]:
A[A[i]], A[i] = A[i], A[A[i]]
else:
i = i + 1
for x in xrange(1, len(A)):
if A[x] != x:
return x
else:
if A[0] == len(A):
return len(A) + 1
else:
return len(A)


def main():
s = Solution()
print s.firstMissingPositive([3,4,-1,1])


if __name__ == "__main__":
import time
start = time.clock()
main()
print "%s sec" % (time.clock() - start)

[Leetcode][Python]41: First Missing Positive

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.