【每日一题Day347】LC136只出现一次的数字 | 位运算

简介: 【每日一题Day347】LC136只出现一次的数字 | 位运算

只出现一次的数字【LC136】

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

map

使用map统计每个数字出现的次数,最后返回只出现一次的元素

  • 代码
class Solution {
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length;i++){
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        Set<Map.Entry<Integer,Integer>> set = map.entrySet();
        for (Map.Entry<Integer,Integer> node : set){
            if (node.getValue() == 1){
                return node.getKey();
            }
        }
        return -1;
    }
}
  • 复杂度

排序

数组从小到大排序,返回与下一个元素不相等的元素

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int i = 0;
        while ( i < nums.length - 1 ){
            if (nums[i] == nums[i+1]){
                i = i + 2;
            }else{
                return nums[i];
            }
        }
        return nums[i];
    }
}
  • 复杂度
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)

*异或

任何一个数字异或它自己的结果都是0。如果将数组中的所有数字进行异或运算,那么最终的结果就是那个只出现一次的数字

  • 代码
class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        for (int i = 0; i < nums.length; i++){
            res = res ^ nums[i];
        }
        return res;
    }
}
  • 复杂度
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
目录
打赏
0
0
0
0
5
分享
相关文章
【运维有小邓】如何进行AD域文件权限管理?
在网络资源管理中,谁可访问资源及访问级别至关重要。Active Directory环境下,管理文件服务器权限耗时且繁琐。ADManager Plus提供批量管理用户NTFS和共享权限的功能,简化权限分配、修改与撤销流程,提升管理效率,确保资源安全。通过集中式界面,管理员能快速准确地控制资源访问,优化环境管理。
205 1
【运维有小邓】如何进行AD域文件权限管理?
Java:javac编译java文件引入class文件和jar依赖
Java:javac编译java文件引入class文件和jar依赖
1178 0
|
3月前
|
幻兽帕鲁服务端性能优化mod
这是一个非官方的《PalWorld》服务器Mod,主要用于修复内存泄漏和高CPU负载问题。目前可能存在未知Bug,建议备份游戏数据后自行测试。下载后,根据系统不同,替换对应路径下的文件即可使用。Windows路径为`PalServer\Pal\Binaries\Win64\`,Linux路径为`pal\pal\binaries\Linux\`。更多详情可访问Github或哔哩哔哩提供的下载地址。
125 9
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
本文介绍了如何通过Lua脚本在Redis中实现分布式锁的原子性操作,避免并发问题。首先讲解了Lua脚本的基本概念及其在Redis中的使用方法,包括通过`eval`指令执行Lua脚本和通过`script load`指令缓存脚本。接着详细展示了如何用Lua脚本实现加锁、解锁及可重入锁的功能,确保同一线程可以多次获取锁而不发生死锁。最后,通过代码示例演示了如何在实际业务中调用这些Lua脚本,确保锁操作的原子性和安全性。
291 6
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
容器化浪潮下的AI赋能:智能化运维与创新应用
近年来,容器技术以其轻量、高效、可移植的特性成为云原生时代的基石,推动应用开发和部署方式革新。随着容器化应用规模扩大,传统运维手段逐渐力不从心。AI技术的引入为容器化生态带来新活力,实现智能监控、自动化故障诊断与修复及智能资源调度,提升运维效率和可靠性。同时,AI驱动容器化创新应用,如模型训练、边缘计算和Serverless AI服务,带来更多可能性。未来,AI与容器技术的融合将更加紧密,推动更智能、高效的运维平台和丰富的创新应用场景,助力数字化转型。
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
230 7
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
144 5
Spring Boot优雅实现多租户架构:概念与实战
【4月更文挑战第29天】在多租户系统中,一个应用实例服务于多个租户,每个租户享有独立的数据视图,而应用的基础设施被共享。这样的架构不仅优化了资源使用,还能降低维护和运营成本。本文将详细介绍如何在Spring Boot中实现多租户架构,并提供具体的实战案例。
406 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等