热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

找单身狗(数组中数字出现的次数)

这里写目录标题题目简化版方法一:方法二(最优):方法三:完整解法题目一个整型数组nums里除两个数字之外&#

这里写目录标题

  • 题目
  • 简化版
    • 方法一:
    • 方法二(最优):
    • 方法三:
  • 完整解法


题目

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

简化版

首先研究一下简化问题:一个数组中只有一个数字是出现一次,其他所有数字都出现了两次。

方法一:


通过排序和两个指针来判断
这个方法时间复杂度和空间复杂度都很高

void bubbleSort(int arr[], int size) {//顺序for (int a &#61; 0; a < size - 1; a&#43;&#43;){//最多size-1轮比较for (int b &#61; 0; b < size - 1 - a; b&#43;&#43;){if (arr[b]>arr[b &#43; 1]){int c &#61; arr[b];arr[b] &#61; arr[b &#43; 1];arr[b &#43; 1] &#61; c;}}}
}int findlone(int* arr1,int size){assert(arr1);bubbleSort(arr1, size);int *one &#61; arr1;int* two &#61; arr1 &#43; 1;while (two){if (*one &#61;&#61; *two){one &#43;&#61; 2;two &#43;&#61; 2;}else{return *one;}}return 0;}

方法二&#xff08;最优&#xff09;&#xff1a;


使用异或

int findlonely(int *arr, int size){int a &#61; 0;for (int i &#61; 0; i < size; &#43;&#43;i){a &#61; a^arr[i];}return a;
}

方法三&#xff1a;


计数法

int find3(int* arr, int size){int num &#61; 0;for (int i &#61; 0; i < size; i&#43;&#43;){num &#61; 0;for (int j &#61; 0; j < size; j&#43;&#43;){if (arr[i] &#61;&#61; arr[j]){num&#43;&#43;;}}if (num &#61;&#61; 1){return arr[i];}}return ;
}

完整解法

思路&#xff1a;
1.将所有元素异或求解&#xff1b;
2.找出解二进制最低位置的1&#xff08;只要找个1分开两个数字就可以&#xff09;&#xff1b;
3.在位移运算异或求解。

int sumeor(int *arr, int size){int a &#61; 0;for (int i &#61; 0; i < size; &#43;&#43;i){a &#61; a^arr[i];}return a;
}
int finddifferentX(int num){int count &#61; 0;while (count < 32 && (num & 1) &#61;&#61; 0){num &#61; num >> 1;count&#43;&#43;;}return count;
}
void findtwosingle(int *arr, int size){if (size < 2){return;}int count &#61; 0;count &#61; finddifferentX(sumeor(arr, size));int num1 &#61; 0;int num2 &#61; 0;for (int i &#61; 0; i < size; i&#43;&#43;){//arr[i] &#61; arr[i] >> count;if (((arr[i] >> count)&1) &#61;&#61; 0){num1 &#61; num1^arr[i];}else{num2 &#61; num2^arr[i];}}printf("%d %d", num1, num2);
}


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
author-avatar
钟孝健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有