代码拉取完成,页面将自动刷新
同步操作将从 star/offer100 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<?php
/**
* 数组中只出现一次的数字
* 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
* 任何两个相同的数进行异或操作结果为0
* 当数只有一个只出现一次的数字时,对所有的数字亦或后的结果就是那个只出现一次的数字
* 当有两个时,对所有数字亦或后,亦或后的结果,就是两个只出现一次的两个不同数字的亦或结果,查看亦或结果的二进制倒数第一个为1的值的位置 如 亦或结果为0101,那么最后一个值为1的就是最后一个数,亦或因为,不同为1,那么这两个不同的值肯定为 xxxxxx1 与 xxxxx0 (不分先后顺序) ,所以将数组中的数字的二进制最后一个值为1与为0的数字,分为两组。然后分别对着两组进行亦或,每组的亦或结果就是那个只出现一次的数字
*/
function FindNumsAppearOnce($array)
{
if (!$array) {
return null;
}
$resultOR = OrMethods($array);
//倒数最后一个为1的位置
$EndIndex = 0;
while ($resultOR) {
if ($resultOR & 1) {
break;
}
$EndIndex++;
$resultOR = $resultOR>>1;
}
$firstArr = [];
$secondArr = [];
foreach ($array as $v) {
if (($v>>$EndIndex) & 1) {
$firstArr[] = $v;
} else {
$secondArr[] = $v;
}
}
$firstNum = OrMethods($firstArr);
$secondNum = OrMethods($secondArr);
var_dump($firstNum , $secondNum);
}
function OrMethods($array)
{
$resultOR = 0;
foreach ($array as $key => $value) {
$resultOR = $value ^ $resultOR;
}
return $resultOR;
}
$arr = [2,4,3,6,3,2,5,5];
FindNumsAppearOnce($arr);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。