1 Remove Duplicates from Sorted Array II
Follow up for “Remove Duplicates”:What if duplicates are allowed at most twice?For example,Given sorted array nums = [1,1,1,2,2,3],
Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.
与删除重复的元素不同,这里只删除重复数超过2的部分。与删除重复的元素做法一样,只不过多用一个标记量flag记录重复的个数是否超过2.
int removeDuplicates(vector<int>& nums)
{
int n=nums.size();
if(n==0)
return 0;
int length=0;
bool flag=false;
for(int i=1;i<n;i++)
{
if(nums[length]!=nums[i])
{
nums[length+1]=nums[i];
length++;
flag=false;
}
else
{
if(!flag)
{
flag=true;
nums[length+1]=nums[i];
length++;
}
}
}
return length+1;
}
2 Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example:
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
因为相同的元素全部被删除,则链表的第一个指针可能被删,因此必须要用到指向链表第一个节点的头指针。
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL)
return NULL;
ListNode* result=new ListNode(0);
result->next=head;
ListNode* pre=result;
ListNode* cur=head;
while(cur)
{
if(cur->next&&cur->val==cur->next->val)
{
int value=cur->val;
while(cur->next&&value==cur->next->val)
{
//删除第一个元素以外的重复元素
ListNode* mid=cur->next;
cur->next=mid->next;
delete mid;
}
ListNode* t=cur;
cur=t->next;
delete t; //删除第一个重复元素
pre->next=cur;
}
else
{
pre=cur;
cur=cur->next;
}
}
return result->next;
}
时间: 2024-10-05 11:08:19