数组去重指针c语言,web前端:js数组去重(最优方法)笔记

在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

资料:

js世界-数组去重到底最快的是谁?

RemoveduplicatevaluesfromJSarray[duplicate]

大致思路

遍历数组的各个项并判断某项是否重复。时间复杂度往往是O(n^2)

优化:通过object,或者set,借助散列表查找的优秀性能来降低复杂度

下面记录几种方法

去重的是单一基础类型(number)可以用遍历+obj-keys

如果有多类型的话,可能会出现

1和字符串'1'被认为是重复的问题

functionmerge2Array5(origin){

constresult=[];

consttagObj={};

for(constioforigin){

if(!tagObj[i]){

result.push(i);

tagObj[i]=1;

}

}

returnresult;

}

去重的是多种基础类型

用for+set

functionmerge2Array6(origin){

constresult=[];

constset=newSet();

for(constioforigin){

if(!set.has(i)){

result.push(i);

set.add(i);

}

}

returnresult;

}

代码量少的写法

//方法1

functionmerge2Array4(origin,target){

returnArray.from(newSet([...origin,...target]))

}

//方法2

functiononlyUnique(value,index,self){

returnself.indexOf(value)===index;

}

//usageexample:

vara=['a',1,'a',2,'1'];

varunique=a.filter(onlyUnique);//returns['a',1,2,'1']

最后

stackoverflow的回答上有句话:

However,ifyouneedanarraywithuniqueelements,whynotusesetsrightfromthebeginning?

hhhhhhh:D

关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值