题目
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
代码实现
快排
class Solution {
public int singleNumber(int[] nums) {
qucikSort(nums,0,nums.length-1);
for (int i = 0; i < nums.length-1;) {
if (nums[i] == nums[i+1] ){
i+=3;
}else {
return nums[i];
}
}
return nums[nums.length-1];
}
public void qucikSort(int[] nums,int left,int right){
if (left < right) {
//返回划分数组左右部分的边界
int par = partation(nums, left, right);
qucikSort(nums, left, par - 1);
qucikSort(nums, par + 1,right);
}
}
/**
* 以nums[right]作为划分值
* @param nums
* @param left
* @param right
* @return
*/
public int partation(int[] nums,int left,int right){
int par = right;
while (left < right){
if (nums[left] <= nums[par]){
left++;
}
else {
right--;
swap(nums,left,right);
}
}
swap(nums,left,par);
return left;
}
public void swap(int[] nums,int i,int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
另有位运算和遍历方法,参考大佬思路:K神解法