• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
将者,智、信、仁、勇、严也。
Hi,我是李智华,华为-安全AI算法专家,欢迎来到安全攻防对抗的有趣世界。
博客园    首页    新随笔    联系   管理    订阅  订阅

leetcode 448. Find All Numbers Disappeared in an Array

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]

解法:因为要修改输入,个人觉得这并不是一个优雅的解法。
class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        # use nums as a map
        # if x in nums appear, set nums[x] to negative
        # if [1,n] in map, map it with negative number
        for n in nums:
            i = abs(n)-1
            if nums[i]>0:
                nums[i] = -nums[i]
        return [i for i in xrange(1, len(nums)+1) if nums[i-1]>0]                    

解法2:排序,将数值放到对应位置上。使用贪心算法!

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        # sort num in nums to its right position
        # for each num, use greedy algo to move num to its right pos, until nums[i] = i+1 
        # for example:
        # [4,3,2,7,8,2,3,1]
        # [7,3,2,4,8,2,3,1]
        # [3,3,2,4,8,2,7,1]
        # [2,3,3,4,8,2,7,1]
        # [3,2,3,4,8,2,7,1]
        # pos 3 is 3 end
        # [3,2,3,4,8,2,7,1]
        # [3,2,3,4,1,2,7,8]
        # [1,2,3,4,3,2,7,8]
        # pos 3 is 3 end
        # ...
        for i,n in enumerate(nums):
            while nums[nums[i]-1] != nums[i]:
                nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
        return [i+1 for i,n in enumerate(nums) if n!=i+1]                            

 

posted @ 2018-03-17 12:49  bonelee  阅读(171)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3