LeetCode] [중복 특정 이중 포인터를 배열 요소를 정렬 [&& 제거, 삭제, 현재 위치에서 알고리즘]

정렬 된 배열을 지정해, 각 요소가 제거 된 배열의 새 길이를 반환 한 후, 한 번만 나타나도록, 장소에 반복되는 요소를 제거해야합니다.

배열을위한 여분의 공간을 사용하지 마십시오, 당신은 장소에 입력 배열을 수정하고 사용 O (1) 여분의 공간의 조건을 완료해야합니다.

예 1 :

지정된 Array의 nums = [1,1,2]

기능 (2)의 새로운 길이를 반환해야하고 원래 배열의 첫 번째 두 요소 nums 1, 2로 변경된다.

당신은 뒤에 새로운 배열 길이의 요소를 넘어 고려해야 할 필요가 없습니다.

예 2 :

주어 nums = 0,0,1,1,1,2,2,3,3,4,

새로운 기능은 길이 (5)를 반환한다 원래 배열 nums 처음 5 개 요소는 0, 1, 2, 3, 4로 변경된다.

당신은 뒤에 새로운 배열 길이의 요소를 넘어 고려해야 할 필요가 없습니다.

출처 : 유지 버튼 (LeetCode)
링크 :
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

분석 : 공간의 복잡성해야합니다 O (1)

배열을 정렬 된, 이중 포인터 전제를 사용할 수있다

두 포인터 P1과 P2, 원래 배열의 처음 시작점

우리는 P1 지점 이후의 배열의 마지막 요소가 중복되는 번호를 제거 할 수 있다고 가정

P2는 중복 된 숫자를 제거하는 현재의 필요를 가리키는 가정

현재 P1의 ==의 P2 다음 P1의 경우 ++

현재 P1은 만약! = P2는, 그 위치 (P1)의 전류 값과 점 P2가 배치되어 ++ P1

핵심 아이디어 :

두 포인터는 P1, 다른 요소 (P1)에 만 다음 경우에만 두 개의 서로 다른 포인터 요소 때 오른쪽으로 이동하고 있습니다 ++

원래 디지털 공간의 이러한 사용하다 현재 위치에서 알고리즘

시간 복잡도 : O (N)

공간 복잡도 : O (1)

클래스 해결 {
 공개 :
 INT의 removeDuplicates (벡터 < INT > & V) 
{ 
    INT N = v.size ();
    경우 (N 개의 == 0 )
         복귀  0 ;
    INT의 K = 0 ;
    위한 ( int로 I = 1 ; i가 N <; 내가 ++ ) 
    { 
        경우 (V [I]! = V [K]) 
        { 
            K ++ ; 
            V [K]가 = 브이 [를 I]; 
        } 
    } 
    리턴 K + 1; 
} 
};


给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

给定 nums = [3,2,2,3], val = 3,

函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,1,2,2,3,0,4,2], val = 2,

函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

注意这五个元素可为任意顺序。

你不需要考虑数组中超出新长度后面的元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element

分析:和第一题思路一模一样,只是移动的条件由两个元素是否相等边除了元素是否等于特定元素

时间复杂度:O(N)

空间复杂度:O(1)

class Solution {
public:
int removeElement(vector<int>& v, int x)
{
    int n=v.size();
    if(n==0)
        return 0;
    int i=0;
    for(int j=0;j<n;j++)
    {
        if(v[j]!=x)
        {
            v[i++]=v[j];
        }
    }
    return i;
}
};


추천

출처www.cnblogs.com/yinbiao/p/11347937.html