zoukankan      html  css  js  c++  java
  • leetcode刷题

    问题描述

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

    示例

    示例 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:
                 大专栏  leetcode刷题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]
    
  • 相关阅读:
    windows 7 wifi热点配置
    Java中的try catch finaly先后调用顺序
    redis php扩展
    mysql索引
    cmd操作数据库的常用命令
    php ajax解决跨越问题
    git常用命令
    php,redis分布式锁防并发
    php商城下单,可以购买多件商品,redis防高并发
    php商城秒杀,redis防高并发
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12366210.html
Copyright © 2011-2022 走看看