題目:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn‘t matter what you leave beyond the new length.
NSMutableArray *arr = [NSMutableArray arrayWithArray:@[@"1",@"2",@"2",@"2",@"5",@"6",@"6",@"11",@"10"]];
NSInteger duplicatedCount = 0;//統(tǒng)計重復(fù)元素個數(shù)
NSInteger size = arr.count;
for (NSInteger i = 1; i<size; i++) {
if ([arr[i] integerValue] == [arr[i-1]integerValue]) {
duplicatedCount++;
}
else
{
arr[i-duplicatedCount] = arr[i];
}
}
//最后size - duplicatedCount為元素個數(shù)
NSInteger index = 1;
NSInteger size = arr.count;
NSInteger count = size; //count為不重復(fù)元素個數(shù)
for (NSInteger i = 1; i<size; i++) {
if ([arr[i] integerValue] != [arr[i-1]integerValue]) {
arr[index] = arr[i];
index++;
}
else
{
count --;
}
}
int curInsertIndex = 0;//當(dāng)前需要替換元素的位置,并且最后就是新數(shù)組的長度
for (int i = 0; i < arr.count; i++)
{
if (curInsertIndex == 0 || [arr[i]integerValue] != [arr[i-1]integerValue])
{
arr[curInsertIndex++] = arr[i];
}
}