LeetCode_数组136-程序员宅基地

技术标签: 算法  python学习  leetcode  LeetCode  

数组

题目

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。算法应该具有线性时间复杂度。 不使用额外空间来实现。

解法

哈希集

使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。

java
class Solution {
    
    public int singleNumber(int[] nums) {
    
        HashSet<Integer> set = new HashSet<>();
        for(int i =0;i<nums.length;i++){
    
            if(!set.add(nums[i])){
    
                set.remove(nums[i]);
            }
        }
        //返回第一个元素
        return `set.iterator().next();`
    }
}
python
class Solution(object):
    def singleNumber(self, nums):
        one =[]
        for i in nums:
            if i not in one:
                one.append(i)
            else:
                one.remove(i)
        return one[0]
哈希表

使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字

java
class Solution {
    
    public int singleNumber(int[] nums) {
    
        Map<Integer,Integer> map = new HashMap<>();
        for(Integer i:nums){
    
            Integer count = map.get(i);
            count = count == null?1:++count;
            map.put(i,count);
        }

        for(Integer i:map.keySet()){
    
            Integer count = map.get(i);
            if(count == 1){
    
                return i;
            }
        }
        return -1;
    }
}
python
class Solution(object):
    def singleNumber(self, nums):
        harshtable = dict()
        for i in nums:
            if i in harshtable:
                harshtable[i] += 1
            else:
                harshtable[i] = 1
        for i in harshtable.keys():
            if harshtable[i] ==1:
                return i
异或算法

做到线性时间复杂度和常数空间复杂度,使用位运算。
1.任何数和0做异或,结果仍然是原来的数
2.任何数和自身做异或运算,结果仍然是0
3.异或运算满足交换律和结合律。
相同的两个值做异或操作,所得为0,由于每个元素重复两次,在遍历后相互抵消,而唯一的元素只出现一次,故可以得到保留。

java
class Solution {
    
    public int singleNumber(int[] nums) {
    
     int ans = nums[0];
     if (nums.length > 1) {
    
     for (int i = 1; i < nums.length; i++) {
    
         ans = ans ^ nums[i];
         }
    }
         return ans;
}
}
python
class Solution(object):
    def singleNumber(self, nums):
        return reduce(lambda x, y: x ^ y, nums)

总结

1.考虑时间复杂度和空间复杂度
2.考虑偶数个元素一样
3.为大家的智慧点个赞

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_56368033/article/details/126265630

智能推荐

小米金融守护消费权益,共筑金融和谐新篇章

在出院结算时,商业医疗保险与医保同步完成结算,无需提供繁琐的纸质申请材料,保险公司直接赔付保险金,简化了理赔流程,赢得了黄奶奶及其家属的高度赞誉。该保险公司的理赔直付模式实现了医疗信息的线上流转和快速理赔支付,大大减轻了消费者的负担。将继续关注消费者权益保护问题,采取多项措施加强消费者权益保障工作,为金融消费者提供更加安全、便捷、高效的金融服务,与社会各方共同构建和谐稳定的金融环境。聚焦于金融消费者权益保护,通过梳理典型案例,旨在提升广大消费者的金融素养,增强风险防范能力,确保他们的合法权益得到切实维护。

Python数据分析大作业(ARIMA 自回归积分滑动平均模型) 4000+字 图文分析文档 销售价格&库存分析+完整python代码

​同时销售量后1000的sku品类占比中(不畅销产品)如上,精品类产品占比第一,达到66.7%,其次是香化类产品,占比11.90%,远远小于精品类产品,酒水类产品占比7.3%,有税商品免税其他商品和电子类产品分别占比6.40%、6.40%、1.3%,将数据按照毛利进行排序,毛利前1000和后1000的sku品类占比如下,​​。

spring-boot 连接池 druid 的配置及监控_druid sql白名单-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏12次。连接池 Druid简介Druid是Java中最好的数据库连接池,并且能够提供强大的监控和扩展功能。业界把Druid和HikariCP做对比后,虽说HikarCP的性能比Druid高,但是因为Druid包括很多维度的统计和分析功能,所以也是大家学则使用的主要原因。Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一_druid sql白名单

ssm基于JAVA的驾校信息管理系统设计论文_驾校管理系统的设计与实现论文近五年参考文献-程序员宅基地

文章浏览阅读787次,点赞26次,收藏26次。独立开发程序期间,才会发现有许多知识都是现学现用得来的,毕竟大学期间所学知识比较有限,专业知识掌握得比较浅显,这也给自己制造了许多麻烦,比如程序开发期间遇到的中文乱码问题,程序对应数据库的数据安全问题,程序开发中框架的使用问题等,这些问题都需要随时去翻阅书籍,或通过百度浏览器等方式寻找解决办法,这也耽误了许多程序开发的宝贵时间,后期我也通过对周边同学的请教,以及指导老师的悉心指导,让我找到了程序开发的相关技巧,也积累了一定的知识量,慢慢地纠正了许多不该犯的错误。也推动了我的程序开发进程。_驾校管理系统的设计与实现论文近五年参考文献

Kafka学习笔记(二、linux和docker安装及使用demo)

第一个总是Kafka Connect进程的配置,包含常见的配置,比如Kafka要连接的代理和数据的序列化格式。这些示例配置文件,包含在Kafka中,使用您之前启动的默认本地集群配置并创建两个连接器:第一个是源连接器,它从输入文件中读取行并将每个行生成到Kafka主题,第二个是接收器连接器,它从Kafka主题中读取消息并将每个消息作为输出文件中的一行生成。下面我们介绍如何使用简单的连接器来运行Kafka Connect,将数据从文件导入到Kafka主题,并将数据从Kafka主题导出到文件。

Java创建对象的最佳方式:单例模式(Singleton)

单例模式是java中最简单的设计模式之一,属于创建式模式,提供了一种创建对象的最佳方式。具体而言,单例模式涉及到一个具体的类,这个类可以确保只有单个对象被创建。它包含一个访问其唯一对象的方法,供外部直接调用,而不需要创建这个类的示例。简而言之,可以不再new一个他的实例,而是直接调用方法。

随便推点

armbian docker Chrome_一起学docker06-docker网络-程序员宅基地

文章浏览阅读141次。一、Docker支持4种网络模式Bridge(默认)--network默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中;IP地址段是172.17.0.1/16 独立名称空间 docker0桥,虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。host容器不会获得一个独立的network namespace,而是与宿主..._armbian 172.17.0.1

Ansible-Tower安装破解

Ansible-Tower安装破解。

如何使用 Nginx 进行负载均衡

通过使用 Nginx 进行负载均衡,您可以提高应用的可靠性和性能。上述指南提供了设置负载均衡的基础步骤,您可以根据具体需求对其进行调整和扩展。确保定期检查和更新您的 Nginx 配置以保持最优性能。希望这篇博客能帮助您开始使用 Nginx 进行负载均衡!如果您有任何问题或需要进一步的帮助,请留言或联系我们。

ARFoundation系列讲解 - 39 AR看车六_arfoundation 关闭动画位移计算-程序员宅基地

文章浏览阅读1k次。十二、播放模型动画1.这里我们要做的是第一次点击中心按钮播放打开车门动画,第二次点击中心按钮关闭车门动画。2.新建一个脚本,命名为“AnimationManager.cs”。(代码如下)using System.Collections.Generic;using UnityEngine;/// <summary>动画管理</summary>public class AnimationManager : MonoBehaviour{ /// <s._arfoundation 关闭动画位移计算

Idea 运行spring项目 出现的bug_idea spring代理对象出bug-程序员宅基地

文章浏览阅读220次。Idea 运行spring项目 出现的bugbug 1错误信息:Cannot start compilation: the output path is not specified for module “02_primary”.Specify the output path in the Project Structure dialog.解决办法:..._idea spring代理对象出bug

JavaFx基础学习【四】:UI控件的通用属性_javafx教程-ui控件-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏6次。Node,就是节点,在整体结构中,就是黄色那一块,红色也算个人理解,在实际中,Node可以说是我们的UI页面上的每一个节点了,比如按钮、标签之类的控件,而这些控件,大多都是有一些通用属性的,以下简单介绍一下。_javafx教程-ui控件

推荐文章

热门文章

相关标签