【每日一题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)
目录
相关文章
|
负载均衡 Shell Docker
Docker-Compose概述
Docker-Compose概述
|
8月前
|
Cloud Native 架构师 云计算
阿里云新版ACE考试通关经历回顾
阿里云新版ACE考试通关经历回顾
|
11月前
|
运维 安全 BI
【运维有小邓】如何进行AD域文件权限管理?
在网络资源管理中,谁可访问资源及访问级别至关重要。Active Directory环境下,管理文件服务器权限耗时且繁琐。ADManager Plus提供批量管理用户NTFS和共享权限的功能,简化权限分配、修改与撤销流程,提升管理效率,确保资源安全。通过集中式界面,管理员能快速准确地控制资源访问,优化环境管理。
310 1
【运维有小邓】如何进行AD域文件权限管理?
|
10月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
384 7
|
安全 Java 数据安全/隐私保护
Spring Boot优雅实现多租户架构:概念与实战
【4月更文挑战第29天】在多租户系统中,一个应用实例服务于多个租户,每个租户享有独立的数据视图,而应用的基础设施被共享。这样的架构不仅优化了资源使用,还能降低维护和运营成本。本文将详细介绍如何在Spring Boot中实现多租户架构,并提供具体的实战案例。
532 2
|
11月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
197 5
|
Java 编译器
深入理解Java内存模型:从基础到高级
本文旨在通过通俗易懂的方式,引导读者深入理解Java内存模型(JMM)的核心概念和工作原理。我们将从简单的基础知识入手,逐步探讨重排序、顺序一致性问题以及volatile关键字的实现机制等高级主题。希望通过这篇文章,你能够对Java内存模型有一个清晰、全面的认识,并在实际编程中有效地避免并发问题。
|
11月前
|
JavaScript 前端开发 C++
关于Vue2里 v-for和v-if一起用的时候会出现的问题
在 Vue 2 中,`v-for` 和 `v-if` 一起使用时可能会出现一些不可预料的问题,因为 `v-for` 的优先级高于 `v-if`,导致 `v-if` 会在每次循环中都执行。这可能导致条件渲染的文本多次显示。本文通过一个具体案例详细解析了这一问题,并提供了两种解决方案:1. 在 `del` 方法中处理逻辑,当 `list.length` 小于等于 2 时清空列表;2. 将 `v-else` 改为 `v-if=&quot;list.length === 2&quot;`,避免多次渲染。最后,作者建议在 2024 年使用 Vue 3,因为它已经修复了这些问题并提升了性能。
130 0
|
移动开发 监控 安全
2024护网工具分享
2024护网工具分享
207 6
|
机器学习/深度学习 编解码
mmseg配置解析 contract_dilation=True
`contract_dilation=True` 是 ResNetV1c 中的一种设置,用于解决多层膨胀卷积中的“栅格效应”。通过调整膨胀率,使卷积核在不同阶段更密集地覆盖输入特征图,避免信息丢失,提升特征提取质量,尤其在语义分割任务中效果显著。
218 0