题目描述
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
提示:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次
进阶:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
来源:力扣(LeetCode)
解题思路
先把数组按从小到大排序,然后设置指针i从数组的下标0开始查找,如果当前指针指向数据和下一个数据相同,则由题可知连续三个数一定相同,直接跳过,设置i=i+3;如果不同,则这个数一定只有一个,直接返回这个数。
Arrays.sort():排序方法
代码实现
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
int i=0;
while (i<nums.length) {
if (i==nums.length-1) {
return nums[i];
}
if (nums[i]==nums[i+1]) {
i+=3;
}else {
return nums[i];
}
}
return 0;
}
}