愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

数组去重

方法一:需要先排序

PHP实现:

function removeDuplicates(&$arr) {
    sort($arr);
    $j = 0;
    $n = count($arr);

    if($n <= 0) return;

    for($i=1; $i<$n; ++$i) {
        if($arr[$i] != $arr[$j]) {
            $arr[++$j] = $arr[$i];
        }
    }
    for($i=$j+1; $j<$n; ++$j) {
        unset($arr[$i]);
    }
}

C++实现:

void removeDuplicates(int* arr, int &n) {
    if(n <= 0) return;
    sort(arr, arr+n);
    int j=0;
    for(int i=1; i<n; ++i) {
        if(arr[i] != arr[j]) {
            arr[++j] = arr[i];
        }
    }
    n = j+1;
}

方法二:HashMap法

void removeDuplicates(int* arr, int &n) {
    if(n <= 0) return;
    
    int k  = 0;
    int tn = 0;
    map<int, bool> m;
    
    for(int i=0; i<n; ++i) {
        if(!m[arr[i]]) {
            m[arr[i]] = true;
            arr[k++] = arr[i];
            tn++;
        }
    }
    
    n = tn;
}