Leetcode No. 136. Single Number

2023-11-10

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

题目很简单,给一个数组,数组中的数两个一对,只有一个数是狗,要求这个数。
但是后面给出的要求,1. 最好是O(N)的时间复杂度;2. 不能用掉多余的内存;

解题思路有三种:
1. 写两个for循环,来遍历,找单个的元素,这个时间复杂度肯定是O(N2)了;
2. 用一个Set来存元素,已经存在就移除,不存在就放进去,到最后肯定只有一个元素,但是这个用掉了多余空间;
3. 用Arrays.sort()排个序,两两比较,不同的那个就出来了,还是需要循环。

看了答案才知道,使用^,这个逻辑运算符来处理;
1. 异或可交换,即 a ^ b = b ^ a
2. a ^ 0 = a
所以把所有的都拿来异或一下,就剩下落单的元素了。

思考:算法题目大多是数学题,在考虑加减乘除的同时,也要想想离散数学的东西。

附上代码:

import java.util.HashSet;
import java.util.Set;

public class SingleNumber {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    SingleNumber sn = new SingleNumber();
    int[] nums = {1, 2, 3, 4, 1, 3, 2, 4, 8};
    System.out.println(sn.singleNumber(nums));
    System.out.println(sn.singleNumber2(nums));
  }

  public int singleNumber(int[] nums) {
    if(nums == null || nums.length == 0) {
      return 0;
    }
    Set<Integer> set = new HashSet<>();
    for(int i = 0; i < nums.length; i++) {
      if(set.contains(nums[i])) {
        set.remove(nums[i]);
      }
      else {
        set.add(nums[i]);
      }
    }
    return set.iterator().next();
  }

  public int singleNumber2(int[] nums) {
    if(nums == null || nums.length == 0) {
      return 0;
    }
    int num = 0;
    for(int i = 0; i < nums.length; i++) {
      num = nums[i] ^ num;
    }
    return num;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode No. 136. Single Number 的相关文章

  • Spring Boot2配置Swagger2生成API接口文档

    一 Swagger2介绍 前后端分离开发模式中 api文档是最好的沟通方式 Swagger 是一个规范和完整的框架 用于生成 描述 调用和可视化 RESTful 风格的 Web 服务 及时性 接口变更后 能够及时准确地通知相关前后端开发人员
  • 数据库备份工具有哪些

    本文主要介绍下数据库备份工具 数据库备份工具有很多种 以下是一些常见的数据库备份工具 mysqldump MySQL官方提供的命令行备份工具 适用于MySQL和MariaDB数据库 它可以将数据库导出为SQL文件 方便进行备份和恢复 属于逻
  • 测试用例(进阶篇)(测试的分类)

    目录 一 测试金字塔 二 按照开发阶段划分 1 单元测试 2 集成测试 3 系统测试 4 验收测试 三 按照测试的实施组织划分 1 测试 2 测试 3 第三方 四 按照是否运行划分 1 静态测试 2 动态测试 五 按照是否手工划分 1 手工

随机推荐

  • Jetson Orin NX install Pytorch

    steJInstalling PyTorch for Jetson Platform NVIDIA Docshttps docs nvidia com deeplearning frameworks install pytorch jets
  • JS 常用插件——下拉刷新、上拉加载,左右滑动,移动端调试,图片预览、放大缩小、旋转

    常用插件大全 非常好用 可以达到事半功倍的效果 下拉刷新 上拉加载 mescroll 上下 左右滑动 better scroll 移动端调试 Vconsole 图片预览 放大缩小 旋转 viewerjs 对象转字符串 并以 拼接成URL q
  • Python 将数据写入csv、xlsx、xls文件中(工厂方法、封装、优雅)

    记录 将数据写入csv xlsx xls文件中 工厂方法 封装 优雅 前言 文件目录存放结构 my file save py wrapper verify param py 封装csv my csv py 工厂方法 savedata fac
  • vite、vue3本地页面正常显示不刷新,外网穿透后页面不停刷新

    明明本地不会刷新 但映射到外网就会不停刷新页面 百度了一篇CSDN文章 vite项目 通过外网域名访问 无限刷新 的解决办法 没有解决我的问题 我使用的是natapp进行外网穿透 报错信息是 WebSocket connection to
  • C++ 生成随机数

    C 库有一个名为 rand 的函数 每次调用该函数都将返回一个非负整数 要使用 rand 函数 必须在程序中包含
  • 软件工程第一次阅读作业

    项目 内容 本作业属于北航软件工程课程 博客园班级链接 作业要求请点击链接查看 作业要求 我在这门课程的目标是 成为一个具有一定经验的软件开发人员 这个作业在哪个具体方面帮助我实现目标 让我对自己目前的状况有一个更加清醒的认识 1 快速阅读
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • jQuery如何判断input元素是否获得焦点(点击编辑时)

    问题提出 如果你要判断input元素是否获得焦点 或者是否处在活动编辑状态 使用jQuery的 hasFocus 方法或 is focus 方法貌似都无效 搜索网上给出的办法 几乎净是采用上述处理方法 然并卵 都是扯淡 我的解决办法 监听点
  • Caffe中对MNIST执行train操作执行流程解析

    之前在 http blog csdn net fengbingchun article details 49849225 中简单介绍过使用Caffe train MNIST的文章 当时只是仿照caffe中的example实现了下 下面说一下
  • Windows下VVC参考软件VTM10.0编译和运行

    1 预备工作 VTM软件下载 链接https vcgit hhi fraunhofer de jvet VVCSoftware VTM tree masterhttps vcgit hhi fraunhofer de jvet VVCSof
  • Word中批量更新域的两个小方法

    一处域更新 如果只有一处需要更新 对着域右键选择 更新域 即可 多处域更新 很多需要更新的时候 可以如下操作 两种方法应该都可以 选择 打印预览 可以更新文档中的所有域 MOS认证的老师教的 CTRL A 全选 然后F9 更新 即可 自己觉
  • UE4 虚幻引擎,绑定Mesh到Skeleton骨骼插槽Socket

    1 在Skeleton骨骼中Add socket添加插槽 新建的Slot socket插槽 可以添加Preview Asset预览资产 方便查看 2 将Component组件绑定到骨骼中 新建一个StaticMesh 绑定组件到骨骼插槽 3
  • 如何学习C++

    转自 http blog csdn net yong2016 article details 9321837 看了这篇文章才知道自己最近太浮躁了 学做技术也是学做人 读者定位是两类人群 a 初学者 即将入手 C 语言 不知道如何开始 b 已
  • Tomcat 与 Nginx,Apache的区别

    Apache指的应该是Apache软件基金会下的一个项目 Apache HTTP Server Project Nginx同样也是一款开源的HTTP服务器软件 当然它也可以作为邮件代理服务器 通用的TCP代理服务器 Tomcat是Apach
  • 计算机分析学生表字段,巧用Excel数据透视表统计分析学生成绩

    巧用Excel数据透视表统计分析学生成绩 科技信息 IT论坛 SCIENCE TECHNOLOGYINFORMATION2010年第19期 巧用Excel数据透视表统计分析学生成绩 魏零 桂林航天工业高等专科学校计算机系 广西 桂林 541
  • Coverless Image Steganography Based on Generative Adversarial Network

    基于生成对抗网络的无载体图像隐写技术 摘要 传统图像隐写技术 修改 嵌入到载体图像来传输秘密信息 gt 隐写工具很容易检测到载体图像的失真 gt 秘密信息的泄露 无载体图像隐写技术 不修改载体图像就可以隐藏秘密信息 但存在容量低 质量差等问
  • 操作系统地址重定位相关练习题

    一 问题描述 某虚拟存储器的用户空间共有32个页面 每页1KB 主存16KB 假定某时刻系统为用户的第0 1 2 3页分配的物理块号为5 10 4 7 而该用户作业的长度为6页 试将十六进制的虚拟地址0A5C 103C转换成物理地址 二 正
  • ★【动态规划】【线段树】基站选址

    问题描述 有N个村庄坐落在一条直线上 第i i gt 1 个村庄距离第1个村庄的距离为Di 需要在这些村庄中建立不超过K个通讯基站 在第i个村庄建立基站的费用为Ci 如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站 那么就成它被覆盖
  • 华为od机考题目-IPv4地址转换成为整数

    while 1 try nums list map int input split if len nums 4 有效ip 为 4段
  • Leetcode No. 136. Single Number

    Given an array of integers every element appears twice except for one Find that single one Note Your algorithm should ha