zoukankan      html  css  js  c++  java
  • leetcode刷题-136-只出现一次的数字

    问题描述

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    示例

    示例 1:

    输入: [2,2,1]
    输出: 1
    

    示例 2:

    输入: [4,1,2,1,2]
    输出: 4
    

    实现

    1 hash

    使用字典存储元素以及元素出现次数,查询字典中出现次数为1的元素返回

    时间复杂度O(n)

    def num_only_once_dic(nums):
        """
        使用额外空间实现
        使用字典存储元素以及元素出现次数
        查询字典中出现次数为1的元素
        """
        nums_dic = {}
    
        for num in nums:
            if num in nums_dic:
                nums_dic[num] += 1
            else:
                nums_dic[num] = 1
    
        for vec in nums_dic:
            if nums_dic[vec] == 1:
                return vec
    
        return None
    

    2 双指针

    先排序

    再使用双指针移动检查,指针移动步长为2

    检查前后指针所指元素是否相同,不相同返回前指针所指元素

    当检查到倒数第二组还为发现所选元素,那么所选元素一定为组后一个元素,跳出循环,直接返回最后一个元素

    不占用额外空间

    def num_only_once(nums):
        """
        不使用额外空间实现
        先排序
        再使用双指针移动检查,指针移动步长为2
        检查前后指针所指元素是否相同,不相同返回前指针所指元素
        """
        pre_point = 0
        check_point = 1
        nums_len = len(nums)
    
        nums.sort()
    
        while check_point != nums_len and nums_len != 0:
            if nums[pre_point] == nums[check_point]:
                pre_point += 2
                check_point += 2
            else:
                return nums[pre_point]
    
        return nums[nums_len-1]
    
  • 相关阅读:
    Ocelot简易教程(二)之快速开始2
    jQuery编程小结
    用户界面的一些好的设计理念
    JQuery插件开发教程
    ASP.NET MVC IOC 之AutoFac攻略
    ASP.NET MVC IOC 之Ninject攻略
    ASP.NET MVC IOC之Unity攻略
    ASP.NET MVC之单元测试分分钟的事
    C#秘密武器之扩展方法
    让AutoMapper在你的项目里飞一会儿
  • 原文地址:https://www.cnblogs.com/liuheblog/p/12095648.html
Copyright © 2011-2022 走看看