我是靠谱客的博主 可耐棒棒糖,最近开发中收集的这篇文章主要介绍一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1.一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]
示例 2:
输入:nums = [1,2,10,4,1,4,3,3]
输出:[2,10] 或 [10,2]
2.代码展示
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int _QuickSort(int *nums, int left, int right)
{
int key = nums[right];
int index = right;
while (left < right)
{
while (left < right)
{
if (nums[left] > key)
{
nums[index] = nums[left];
index = left;
break;
}
++left;
}
while (left < right)
{
if (nums[right] < key)
{
nums[index] = nums[right];
index = right;
break;
}
--right;
}
}
nums[left] = key;
return left;
}
void
QuickSort(int *nums, int left, int right)
{
if (left > right)
{
return;
}
int index = _QuickSort(nums, left, right);
QuickSort(nums, left, index - 1);
QuickSort(nums, index + 1, right);
}
//快排
//双指针
int* singleNumbers(int* nums, int numsSize, int* returnSize) {
*returnSize = 0;
QuickSort(nums, 0, numsSize - 1);
for (int i = 0; i < numsSize; i++)
{
if (i+1<numsSize && nums[i] == nums[i + 1])
{
i = i + 1;
}
else
{
nums[(*returnSize)++] = nums[i];
}
}
return nums;
}
3.解题思路
先进行一个O(nlogn)的排序,然后一次遍历O(n),选出只出现一次的数。
这个题还可以用相同数字抑或出来是0,来进行分组,然后筛选出来。
最后
以上就是可耐棒棒糖为你收集整理的一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。的全部内容,希望文章能够帮你解决一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复