当前位置: 首页 > news >正文

算法-只出现一次的数字集合

前言

仅记录学习笔记,如有错误欢迎指正。

题目

记录一道面试过的题目
题目如下:

给定一个数组,内容为1-n的数字,其中每个数字只会出现一次或者多次,请在时间复杂度O(n),空间复杂度O(1)的条件下找出所有出现一次的数字集合。

例子:

输入:
1, 2, 3, 4, 5, 4, 3, 2

输出: 5,1

解释:
1,5只出现一次

代码

之前好像见过,但是没用心记录。

 public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5, 4, 3, 2};List<Integer> result = findUniqueNumbers(nums);System.out.println("Unique numbers: " + result);}public static List<Integer> findUniqueNumbers(int[] nums) {List<Integer> result = new ArrayList<>();// 使用异或运算找到所有出现一次的数字int xor = 0;for (int num : nums) {xor ^= num;}// 找到异或结果中最低位的1int lowestBit = xor & -xor;// 根据最低位的1将数组分成两部分,分别进行异或运算int group1 = 0, group2 = 0;for (int num : nums) {if ((num & lowestBit) != 0) {group1 ^= num;} else {group2 ^= num;}}// 将出现一次的数字添加到结果列表中if (isUnique(group1, nums)) {result.add(group1);}if (isUnique(group2, nums)) {result.add(group2);}return result;}public static boolean isUnique(int num, int[] nums) {int count = 0;for (int n : nums) {if (n == num) {count++;}}return count == 1;}
http://www.lryc.cn/news/260321.html

相关文章:

  • Linux,Web网站服务(一)
  • Monkey工具之fastbot-iOS实践
  • 我想当个程序员
  • ACM32如何保护算法、协议不被破解或者修改
  • Android Studio(Flutter)常用快捷键
  • CSS特效030:日蚀动画
  • 746.使用最小花费爬楼梯
  • 【业务功能篇132】生产环境中出现oom问题,排查思路
  • 如何将html网页免费转为excel?
  • 手撕分布式缓存---HTTP Server搭建
  • 2. PyTorch——Tensor和Numpy
  • C#随笔 | List.Sort()使用小计
  • 【WebRTC】用WebRTC做即时视频聊天应用
  • GPT-4.5 要来了!谷歌大模型 Gemini 确实给够压力
  • 美易官方:加密资产将破坏金融稳定,无法取消就要加强监管
  • 一文读懂Java中的设计模式——适配器模式,对于兼容不同系统特别适用!
  • 2023年国内外评分前十的项目管理软件推荐
  • 3.electron之vue3.0的桌面应用程序
  • 数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测
  • 旺店通·企业奇门对接打通金蝶云星空查询仓库接口与仓库新增接口
  • PostgreSQL获取以前的时间
  • 逆向获取某音乐软件的加密(js逆向)
  • C语言—每日选择题—Day42
  • jsp文件引用的css修改后刷新不生效问题
  • SpringBoot运维中的高级配置
  • Centos7下OpenLDAP安装
  • 2036开关门,1109开关门
  • 最简单的pixel刷机和安装面具、lsposed
  • 深度学习第5天:GAN生成对抗网络
  • 从零开始搭建企业管理系统(七):RBAC 之用户管理