【LeetCode】Fizz Buzz 解题报告

【LeetCode】Fizz Buzz 解题报告


[LeetCode]

https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/

  • Total Accepted: 14302
  • Total Submissions: 24993
  • Difficulty: Easy

Question

Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array),
some elements appear twice and others appear once.

Find all the elements of [1, n] inclusive that do not appear in this
array.

Could you do it without extra space and in O(n) runtime? You may
assume the returned list does not count as extra space.

Example:

Input: [4,3,2,7,8,2,3,1]

Output: [5,6]

Ways

刚开始没想到很有效的方法,只能用暴力解决。单着个方法不符合题目没有额外空间的要求

方法一:

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        cList = list(range(1, len(nums) + 1))
        returnList = []
        for x in nums:
            cList[x - 1] = 0
        for x in cList:
            if x != 0:
                returnList.append(x)
        return returnList

AC:359 ms

方法二:

参考了别人的,我学会了一种方法:原地变负来标记。比如对于[4, 3, 2, 7, 8, 2, 3, 1],把这些元素作为list的索引,指向的元素变换成负数,那么,没有变换成负数的位置就是没有人指向它,故这个位置对应的下标没有出现。

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        for i in range(len(nums)):
            index=abs(nums[i])-1
            nums[index]= - abs(nums[index])
        return [i+1 for i in range(len(nums)) if nums[i] > 0]

AC:362 ms

这个速度仍然不理想。

Date

2017 年 1 月 2 日

你可能感兴趣的:(【LeetCode】Fizz Buzz 解题报告)