有序数组平方后不重复元素个数

该博客讨论了一种算法问题,即如何计算一个有序数组在对其元素平方后不重复的数字数量。算法使用了双指针技术,通过维护一个`pre`指针来跟踪前一个元素的绝对值,比较左右指针所指向元素的绝对值,并根据比较结果更新计数`cnt`。左右指针逐步向中间收敛,直到它们相遇,最后返回计数结果。

题目:有序数组{-9,-3,-1,1,1,3,9,9}平方之后{81,9,1,1,1,9,81,81}不重复的数字有多少,题目中3个

思路:需要2个移动指针,和一个pre指针

需要和pre比较,不相等,则res+1

左右指针分别向中间移动

int uniqueCnt(vector<int> inputs){
    int left=0,right=inputs.size()-1,cnt=0;
    int pre=-1;
    while(left<right){

        if(abs(inputs[left])>abs(inputs[right])){
            if(pre!=abs(inputs[left])){
                cnt++;
                pre=abs(inputs[left]);
            }
            left++;
        }else{
            if(pre!=abs(inputs[right])){
                cnt++;
                pre=abs(inputs[right]);
            }
            right--;
        }
    }
    return cnt;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值