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

算法面试题汇总_1只出现一次的数字

题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复

题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4

思路
使用hashmap,遍历数组,将数字的值作为键,将数字出现的次数作为值,如果数字没有在hashmap中,添加键值(数字,1);如果出现过,添加(数字,2),遍历hashmap,找到值为1对应的键。即为答案。

代码实现

package 高频题2018.热身.热身;import java.util.HashMap;/*
**题目**:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
**说明**:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
**示例 1**:
输入: [2,2,1]
输出: 1
**示例 2**:
输入: [4,1,2,1,2]
输出: 4*/
public class 只出现一次的数字 {public static void main(String[] args) {int[] arr &#61; {2,2,1};System.out.println(repeatNum(arr));}public static int repeatNum(int[] arr){//使用hashmap&#xff0c;数字的数值作为键&#xff0c;出现次数作为值HashMap kv &#61; new HashMap<>();for(int i &#61; 0;i }

结果
在这里插入图片描述

方法二&#xff1a;更简便 异或实现
思路
异或运算的特点&#xff1a;两个相同的数字异或&#xff0c;结果为0。

因为数组中除了一个元素只出现一次之外&#xff0c;其它的元素都出现两次&#xff0c;如果把所有的数都异或&#xff0c;相同的数字异或为0&#xff0c;最后只剩下出现一次的数字&#xff0c;它和0异或&#xff0c;结果就是它本身。

代码

public class 只出现一次的数字 {public static void main(String[] args) {int[] arr &#61; {2,4,1,1,2};
// System.out.println(repeatNum(arr));System.out.println(singleNumber(arr));}public static int singleNumber(int[] nums) {int num &#61; 0;for(int i &#61; 0; i }

方法二参考&#xff1a;https://blog.csdn.net/baidu_40931662/article/details/83892506


推荐阅读
author-avatar
日蕾文散Lotus
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有