有序数组每个数平方后,不同数字的个数?O(n)

简介: 此乃一道笔试题,当时的确也做出来啦。(但是在细节上还是出错啦,对多次重复出现的数字可能会重复计数,没有记录上次删除的元素)   如题,有序数组,可以知道平方之后在两边的数据较大,中间的数据较小。            因此可以使用两个下标,从两边向中间扫描。

此乃一道笔试题,当时的确也做出来啦。(但是在细节上还是出错啦,对多次重复出现的数字可能会重复计数,没有记录上次删除的元素)

 

如题,有序数组,可以知道平方之后在两边的数据较大,中间的数据较小。

          

因此可以使用两个下标,从两边向中间扫描。将绝对值大的数字删掉,计数即可,并记录刚才删除的数值的绝对值,以免出现多次相同的数据,重复计数的问题。

具体看完整代码:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int squareUniqueNum(vector<int> &ver){
 7     int len = ver.size();
 8     if(len < 2)
 9         return len;
10 
11     int i = 0;
12     int j = len - 1;
13     int pre = abs(ver[0]);  ///记录上次删除数据的绝对值
14     int num = 1;    ///数字为 1
15     while(i<=j){
16         ///每次删除绝对值较大的数字,并记录下删除是数字的绝对值,绝对值相同的只计数一次
17         if(abs(ver[i]) > abs(ver[j])){
18             if(pre != abs(ver[i])){ ///如果没有删过
19                 num++;
20                 pre = abs(ver[i]);
21             }
22             i++;
23         }
24         else{
25             if(pre != abs(ver[j])){ ///如果没有删过
26                 num++;
27                 pre = abs(ver[j]);
28             }
29             j--;
30         }
31     }
32     return num;
33 }
34 
35 int main()
36 {
37     vector<int> ver({-5,-3,-1,1,1,2});
38     int num = squareUniqueNum(ver);    ///求有序数组中数字平方后,消重结果中数字的个数
39     cout<<num<<endl;
40     return 0;
41 }

 

相关文章
Access Key ID(AK)或者Secret Access Key(AK)可能存在错误或者已失效
Access Key ID(AK)或者Secret Access Key(AK)可能存在错误或者已失效
1621 1
|
算法 编译器
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
2391 1
|
2月前
|
人工智能 运维 持续交付
5月26日新加坡,千问大会见!
5月26日,2026千问大会在新加坡金沙会展中心召开。在大会【Agent-Native Infra】分论坛,阿里云云原生分享在一站式构建部署、多智能体治理与协作、全链路观测与持续优化、全域智能运维等一系列加速企业Agent 工程分进程的技术产品创新,助力企业打通从 Agent 开发到规模化运行的最后一公里,让智能真正成为可持续交付的生产力。
|
11月前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
1287 8
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
717 6
TreeMap的排序
TreeMap的排序
714 0
|
存储 Java 编译器
JNI内存方面说明以及相关类型手动释放内存
JNI内存方面说明以及相关类型手动释放内存
1806 0
|
存储 C语言
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
1021 0
|
运维 网络协议 网络安全
2024网络建设与运维赛题-网络配置教程
某集团公司的网络由北京总公司的SW1、SW2、SW3,上海分公司的SW及长沙办事处的设备互联,采用神州数码的DCR-2855路由器、CS6200-28X-Pro三层交换机、DCWS-6028-Pro无线交换机和DCFW-1800E-N3002-Pro防火墙。IP配置包括多个VLAN及Tunnel,如SW1的10.0.1.1/32、RT1的10.0.5.1/32等。FW1和FW2作为边界防火墙,提供不同区域的访问控制。配置示例展示了SW1、SW2和SW3的接口IP分配。
2024网络建设与运维赛题-网络配置教程
|
关系型数据库 PostgreSQL Docker