每日一练Day04:寻找单身狗
寻找单身狗
- 一、一个单身狗
- 二、两个单身狗
寻找单身狗实际上是力扣上的《只出现一次的数字》具体描述如下:
一、一个单身狗
本题的特点是: 非空数组、其余数字出现两次、寻找只出现一次的数字。那么如何寻找那个”单身狗“呢?
思路:
我们已学过异或操作符^
,异或的特点是,对应二进制位相同为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:寻找单身狗相关推荐
- hpuoj【1040】寻找单身狗 【思维】
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 提交: 168 解决: 55 统计 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固 ...
- hpuoj寻找单身狗
1040: 寻找单身狗 [思维] 时间限制: 1 Sec 内存限制: 128 MB 点击打开题目链接 题目描述 杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书.固问所寻何书,答曰:&q ...
- 寻找单身狗(c语言)
在一个数组中寻找一只出现一次的的数字(单身狗) 当今社会 三人行 必有狗 是谁我不说 数组中也会出现 单身狗数字 例如数组 1 2 2 3 3 1 4中 4就是单身狗 思路 因为单身狗只有一个 直 ...
- 初学C语言【14】寻找单身狗
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.编写一个函数找出这两个只出现一次的数字.LeetCode:只出现一次的数字,题目链接 示例 输入:[ 1,2,3,4,5,2,1,3 ] 输 ...
- 牛客每日练习----B-布置会场(II),B-经商,B-苦逼的单身狗
大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤 链接:https://ac.nowcoder.com/acm/problem/14549 ...
- 让单身狗犹如过情人节的“网易云日推”原来是这样生成的
转自:网易云首次披露推荐算法:让单身狗犹如过情人节的日推原来是这样生成的 作者:宇多田 侵删 网上各种关于网易云音乐的个性推荐算法的详解五花八门,但是官方从未现身说法! 为了解开用户们对每日推荐歌单背 ...
- c语言单身狗题目罩得住学长,看到就是赚到!心理学教授研究多年,只为谈不了恋爱的你...
近了近了,妹妹们的成团日终于近了! 为了将pick的妹妹送上梦寐以求的出道位,本青春制作人日夜不停咬定打投不放松! 一边听着<YES!OK!>为自己加油打劲,一边想象着明天九人团的团名舒缓 ...
- 【高效解法】1065 单身狗 (25分)_27行代码AC
立志用更少的代码做更高效的表达 "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ ...
- 每日一小练——高速Fibonacci数算法
上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...
最新文章
- Centos7 下安装配置tomcat7
- GraphQL入门之Schema和类型规范
- Android Notification通知详解
- struts html:radio标签的初始值与判断
- 腾讯AI Lab开源800万中文词的NLP数据集 | 资源
- ios11+html5偏移20pt,iOS tableView内容向下偏移20pt或向下偏移64pt的问题?
- 更新导致Svchost CPU100%(转)
- Linux汇编调试器EDB
- Qt编程环境下学习《OpenGL编程指南(原书第九版)》(一)
- 视频编码格式、视频码率、视频帧率、分辨率的概念
- python 线性插值处理_python线性插值解析
- VSCode插件篇-Code Runner配置Python环境
- 2021腾讯算法大赛
- 37.softmax多元逻辑回归
- php 打印 加标题,打印每页都有标题怎么设置
- 工作杂谈之说说工作中的二宗罪
- 易客多快排系统部署教程
- Android Studio出现Execution failed for task ‘:app:processDebugMainManifest
- 伤口清创术行业调研报告 - 市场现状分析与发展前景预测
- OPPO推出免费商用字体:OPPO Sans