基于26号题目,我发现老师上课讲的都是给有序数组去重的。如果遇见无序数组去重呢?
解决方案是否有两种
1)先给数组排序,在按老师给的方法;
2)遍历数组,每次都检查是否跟前面已去重的元素是否重复。代码如下:
class Solution {//无序数组去重,并返回去重后的数组
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0;
//nums[1,2,2,1]
//nums[0...r]去重的
int r = 0;
for (int i = 1; i < nums.size(); i++) {
int isDup = 0;
for (int j = 0; j <= r; j++) {//判断nums[i]与nums[0...r]是否有重复元素
if (nums[i] == nums[j]) {//有重复元素
isDup = 1;
break;
}
}
if (!isDup) {
if (r + 1 != i)
swap(nums[++r], nums[i]);
else
++r;
}
}
return r + 1;
}
};
int main()
{
vector<int> nums = { 1,2,2,1 };
cout << Solution().removeDuplicates(nums) << endl;
std::cout << "Hello World!\n";
}
总结:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0; ///------1)此处不判断,结果不AC
//arr[]={1,1,2}
//nums[0,,r]去重的
int r = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[r] != nums[i])
if (r + 1 != i)
swap(nums[++r], nums[i]);
else
++r;
}
return r + 1;
}
};
1)处不判断不能AC?为什么?