给定一个升序数组,求数组中绝对值不相同的元素的个数

题目描述:给定一个整形数组,数组是升序排列的,可能存在负数,统计数组中所有不同绝对值的元素的个数。

思路:设置两个指针,分别指向数组的第一个元素和最后一个元素,可以看做是两个有序数组的合并过程(从大到小合并)。

#include<iostream>
#include<vector>
using namespace std;
int GetNumberWithDifferentAbsVal(vector<int> num)
{
    int len = num.size();
    if (len <= 0)
        return 0;
    int p1 = 0, p2 = len - 1;
    int curNum;
    int cnt = 0;
    if (abs(num[p2]) > abs(num[p1]))
    {
        curNum = abs(num[p2]);
        --p2;
        
    }
    else
    {
        curNum = abs(num[p1]);
        ++p1;
    }
    while (p2 >= p1)
    {
        if (abs(num[p2]) > abs(num[p1]))
        {
            if (abs(num[p2]) == curNum)
                ++cnt;
            curNum = abs(num[p2]);
            --p2;
        }
        else
        {
            if (abs(num[p1]) == curNum)
                ++cnt;
            curNum = abs(num[p1]);
            ++p1;
        }
    }
    return len - cnt;
    
}
int main()
{
    int a[13] = { -5,-4,-3,-3,-2,-2,0,0,2,2,9,9,9 };
    int b[10] = { -1,0,1,1,2,3,4,5,6,7 };
    int c[10] = { 1,1,2,2,3,3,4,4,5,5 };
    int d[10] = { -2,-1,0,0,1,1,1,2,3,3 };
    vector<int> numbers(d, d + 10);
    cout<< GetNumberWithDifferentAbsVal(numbers)<<endl;
    return 0;
}

 

posted @ 2017-09-26 10:46  蓦然闻声  阅读(570)  评论(0编辑  收藏  举报