标签:一次 return 数字 nums int 元素 cishu 出现 hashSet
题目链接:力扣
题目描述:
只出现一次的数字
难度简单2130
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1示例 2:
输入: [4,1,2,1,2] 输出: 4通过次数544,988提交次数757,853
二,代码与思想:
package zyh.example.demo.suanfati.leetcode.simple;
import java.util.HashSet;
import java.util.Set;
/**
* @ClassName SingleNumber
* @Author zhangyonghui
* @Description 只出现一次的数字
* @Date 2021/12/1 11:15
* @Version 1.0
**/
public class SingleNumber {
public static void main(String[] args) {
// [4,3,1,2,1,2,3]
// int[] nums = new int[]{4, 3, 1, 2, 1, 2, 3, 5, 6, 7, 8, 6, 7, 5, 4, 9, 9};
int[] nums = new int[]{4,3,1,2,1,2,3};
int number = singleNumber2(nums);
System.out.println("number = " + number);
}
/**
* 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
* 之前的元素和现在这个元素进行比较,如果不一样则继续比较,如果一样则将这两个元素挪到前边,以后不再比较,然后开始下一个元素;
* @param nums
* @return
*/
public static int singleNumber(int[] nums) {
int numsLength = nums.length;
int cishu = 0;
for (int i = 1; i < numsLength; i++) {
int nowNum = nums[i];
// [4,3,1,2,1,2,3]
for (int j = cishu; j < i; j++) {
int preNum = nums[j];
if (preNum == nowNum) {
int temp1 = preNum;
nums[j] = nums[cishu];
nums[cishu] = temp1;
int temp2 = nowNum;
nums[i] = nums[cishu + 1];
nums[cishu + 1] = temp2;
cishu += 2;
break;
}
}
}
return nums[numsLength - 1];
}
/**
* 使用额外内存空间,HashSet来实现:
* Set集合特点:无序,不可重复;
* 底层原理,HashSet是使用hash表实现的,是将HashMap的value作为一个常量值,然后使用HashMap的key来存储数据;
* @param nums
* @return
*/
public static int singleNumber2(int[] nums) {
Set<Integer> hashSet = new HashSet<>();
for (int num : nums) {
//如果可以添加,说明还没有重复元素,继续往后遍历数组元素;
//如果添加失败,则说明有了重复元素,那么将该元素从Set集合中删除,同时继续往后遍历数组元素;
if (hashSet.add(num)) {
continue;
}else{
hashSet.remove(num);
}
}
//最后遍历完成之后,集合中仅剩下一个元素,即返回结果
return hashSet.iterator().next();
}
}
标签:一次,return,数字,nums,int,元素,cishu,出现,hashSet 来源: https://blog.csdn.net/qq_44750696/article/details/121665885
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。