void dee(vector&nums)
{
*val->nums;*dec=*val->next;
if (!nums)
{
return;
}
while (dec)
{
if (val != dec)
{
dec = dec->next;
}
else
{
nums.delete[dec];
dec = dec->next;
}
}
val = val->next;
}
class Solution
{
public:
int removeDuplicates(vector&nums)
{
while(val)
{
dee(&nums);
}
return nums.size(),nums;
}
}
这是我写的程序,我知道我写的有错误,我希望来个大佬在我的基础上改正正确并指出错误知识点,这是我的要求,希望来个负责任认真的大佬,如果整体拥有大错误希望能详细指正,最好要在我思路上进行改正,题简单,不能满足我要求的大佬就不要浪费时间了

删除排序数组中的重复项,力扣原题,来个修改指正
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 广大菜鸟 2021-12-31 10:09关注
你程序的问题:
1、vector&nums 没有指明类型(可能是csdn显示问题)
2、返回类型问题int 却是return nums.size(),nums;
3、vector类型操作没有delete[],函数应该是()
vector相关函数:
•insert() 插入元素到Vector中 iterator insert( iterator loc, const TYPE &val ); //在指定位置l...
•push_back() 在Vector最后添加一个元素(参数为要插入的值) 删除元素:
•clear() 清空所有元素 empty() 判断Vector是否为空(返回tr...
•erase() 删除指定元素 (可以用指针来代替迭代器)
4、val和dec,我不知道是啥类型,竟然有next,我刚刚去看了题目就给了个vector类型,vector也没next指针啊
我给你个万能的删除排序数组中的重复项,至多保留k个的模板,当然我用的是双指针法,题目明确说了可以保存
后面的不用删,只需要返回有效长度作len
其实,双指针也没什么可怕的,就是一个走快点,然后与慢的那个比,同了就快的继续走;不同了就复制给慢的,慢的成为它自己的下一位,快的继续走,循环往复,直到快的走完#include<iostream> #include<vector> using namespace std; class Solution { public: int removeDuplicates(vector<int>& nums) { int high=nums.size(); int slow=0; int k=1;//最多保留k位相同数字 for(int j=0;j<high;j++){ if(slow<k||nums[slow-k]!=nums[j]) nums[slow++]=nums[j]; } return slow; } }; int main(){ vector<int>nums; int tmp[]={1,1,2}; for(int i=0;i<(int)(sizeof(tmp)/sizeof(int));i++) nums.push_back(tmp[i]); int len = Solution().removeDuplicates(nums); cout<<len<<","; for (int i = 0; i < len; i++) { cout<<nums[i]<<" "; } }
对了,你也可以按照你那个思路,遍历同时删除重复元素,真正意义上的删除#include<iostream> #include<vector> using namespace std; class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.size()==0) return 0; vector<int>::iterator it, it1; for (it = ++nums.begin(); it != nums.end();) { it1 = find(nums.begin(), it, *it); if (it1 != it) it = nums.erase(it); else it++; } return nums.size(); } }; int main() { vector<int>nums; int tmp[] = { 1,1,2 }; for (int i = 0; i < (int)(sizeof(tmp) / sizeof(int)); i++) nums.push_back(tmp[i]); int len = Solution().removeDuplicates(nums); cout << len << ","; for (int i = 0; i < len; i++) { cout << nums[i] << " "; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录