寻找单身狗

  • 一、一个单身狗
  • 二、两个单身狗

寻找单身狗实际上是力扣上的《只出现一次的数字》具体描述如下:

一、一个单身狗

本题的特点是: 非空数组、其余数字出现两次、寻找只出现一次的数字。那么如何寻找那个”单身狗“呢?

思路:
我们已学过异或操作符^,异或的特点是,对应二进制位相同为0,相异为1。了解这样的原理就可以很容易得到,如果对应两个相同的数字,异或结果必为0,0和非零数字异或为非零数字。已知这种原理后,如果我们将数组中的所有元素异或,出现两次的的元素将异或为0,0与“单身狗”异或恰能得到所求“单身狗”。

理论成立,实践开始:

    public static int singleNumber(int[] array) {int num=0;for (int i = 0; i < array.length ; i++) {num^=array[i];}return num;}

测试结果:


二、两个单身狗

本题可以说是上一题的进阶版本,难度也由简单——>中等。

题目特点: 非空数组、其余数字都出现了两次、寻找两个只出现一次的数字。

思路:
对于这道题如果我们还是将所有元素异或,显然是得不到答案的。那么应该怎么做呢?解决这道问题用到了数字的分组,如果我们将存在的两个“单身狗“分别分到不同的两组中,剩下的两两相同的数字分别分到两边,依旧是异或的原理,将两组数字分别异或,最后得到的两个异或结果不就是最终答案吗?

当然,说的简单,我们该怎样分组呢?这里提供了这样一种思路:

1、首先我们先将所以的数字异或,由于仅有两个“单身狗”,其余数字均出现两次,这样得到的结果就相当于是两个”单身狗“异或的结果。

2、由于我们的目的很明确,就是将两个”单身狗“分别分到两个组中,其余两两相同的数字放到它们两边即可。所以我们可以找到异或后二进制为1的位,因为二进制为1说明这是两个”单身狗“数字不同的二进制位,以此二进制位进行分组就可以将两个”单身狗“数字分别放到不同的组中,同时会将其余两两相同的数字分到他们两边,最后分别异或即可得到结果。

可能文字描述不够直观,下面以nums = [1,2,1,3,2,5]为例,画图讲解:

理论成立,实践开始:

    public static int[] sigleNumbers(int[] array) {int[] nums=new int[2];int tmp=0;int i=0;//整体异或for (i = 0; i < array.length; i++) {tmp^=array[i];}//寻找二进制位为1的位,用于分组for (i=0;i<32;i++) {if(((tmp>>>i)&1)==1) {break;}}int num1=0;int num2=0;//分组异或for (int j = 0; j < array.length; j++) {if(((array[j]>>>i)&1)==1) {num1^=array[j];} else {num2^=array[j];}}nums[0]=num1;nums[1]=num2;return nums;}

测试结果:

------------------ (本章完)------------------

每日一练Day04:寻找单身狗相关推荐

  1. hpuoj【1040】寻找单身狗 【思维】

    1040: 寻找单身狗 [思维] 时间限制: 1 Sec  内存限制: 128 MB 提交: 168  解决: 55  统计 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固 ...

  2. hpuoj寻找单身狗

    1040: 寻找单身狗 [思维] 时间限制: 1 Sec  内存限制: 128 MB 点击打开题目链接 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固问所寻何书,答曰:&q ...

  3. 寻找单身狗(c语言)

    在一个数组中寻找一只出现一次的的数字(单身狗) 当今社会 三人行 必有狗 是谁我不说 数组中也会出现 单身狗数字  例如数组 1 2 2 3 3 1 4中  4就是单身狗 思路 因为单身狗只有一个 直 ...

  4. 初学C语言【14】寻找单身狗

    一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字.LeetCode:只出现一次的数字,题目链接 示例 输入:[ 1,2,3,4,5,2,1,3 ] 输 ...

  5. 牛客每日练习----B-布置会场(II),B-经商,B-苦逼的单身狗

    大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤 链接:https://ac.nowcoder.com/acm/problem/14549 ...

  6. 让单身狗犹如过情人节的“网易云日推”原来是这样生成的

    转自:网易云首次披露推荐算法:让单身狗犹如过情人节的日推原来是这样生成的 作者:宇多田 侵删 网上各种关于网易云音乐的个性推荐算法的详解五花八门,但是官方从未现身说法! 为了解开用户们对每日推荐歌单背 ...

  7. c语言单身狗题目罩得住学长,看到就是赚到!心理学教授研究多年,只为谈不了恋爱的你...

    近了近了,妹妹们的成团日终于近了! 为了将pick的妹妹送上梦寐以求的出道位,本青春制作人日夜不停咬定打投不放松! 一边听着<YES!OK!>为自己加油打劲,一边想象着明天九人团的团名舒缓 ...

  8. 【高效解法】1065 单身狗 (25分)_27行代码AC

    立志用更少的代码做更高效的表达 "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ ...

  9. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

最新文章

  1. Centos7 下安装配置tomcat7
  2. GraphQL入门之Schema和类型规范
  3. Android Notification通知详解
  4. struts html:radio标签的初始值与判断
  5. 腾讯AI Lab开源800万中文词的NLP数据集 | 资源
  6. ios11+html5偏移20pt,iOS tableView内容向下偏移20pt或向下偏移64pt的问题?
  7. 更新导致Svchost CPU100%(转)
  8. Linux汇编调试器EDB
  9. Qt编程环境下学习《OpenGL编程指南(原书第九版)》(一)
  10. 视频编码格式、视频码率、视频帧率、分辨率的概念
  11. python 线性插值处理_python线性插值解析
  12. VSCode插件篇-Code Runner配置Python环境
  13. 2021腾讯算法大赛
  14. 37.softmax多元逻辑回归
  15. php 打印 加标题,打印每页都有标题怎么设置
  16. 工作杂谈之说说工作中的二宗罪
  17. 易客多快排系统部署教程
  18. Android Studio出现Execution failed for task ‘:app:processDebugMainManifest
  19. 伤口清创术行业调研报告 - 市场现状分析与发展前景预测
  20. OPPO推出免费商用字体:OPPO Sans

热门文章

  1. 全球与中国手术手套市场深度研究分析报告
  2. 半监督kmeans聚类
  3. 如何让员工听你的话?
  4. 【Python脱单神器】表白新方式:这么浪漫诗意表白藏头诗,女生看到还不赶紧答应你?老表,我只能帮你到这里了~
  5. cmake 版本 arm_学习电路仿真:proteus电路仿真软件在ARM中的应用解析
  6. HTML标签的语法格式和属性
  7. 要求输入框只能输入数字跟破折号
  8. C语言 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
  9. 【量化金融】20220820_银行行业市盈率(TTM)的报告
  10. Android 模拟器AVD下载与使用