一个数组操作需求,请教写法。

2021 年 8 月 27 日
 tlerbao

假设有数组 A:[5,9,20],数组 B:[5,20];

最终得到新的数组:

要求:新数组的位数必须和数组 A 相同,每位数据只能是 0 或 1,根据 B 判断是 0 是 1,当 A 的一位元素出现在 B 中则为 1,未出现则为 0.

比如上面的数组最后生成的应该是:[1,0,1],因为第二位的 9 并没有出现在数组 B 中。

数组 A 和数组 B 的位数不定,但 B 数组要么空,要么就是 A 中的一个或多个,B 如果是空,则输出 A 数组位数的全 0 数组。

1733 次点击
所在节点    问与答
11 条回复
tlerbao
2021 年 8 月 27 日
忘说语言了,js,php 都行;请教优雅写法。
tlerbao
2021 年 8 月 27 日
```
// 我写的
$a = [5,9,20];
$b = [5,20];
return array_map(function ($aaa) use ($b) {
return $ccc[] = in_array($aaa, $b) ? 1 : 0;
}, $a);
```
marat1ren
2021 年 8 月 27 日
用异或计算,结果为 0 则两个数相同。
Chemist
2021 年 8 月 27 日
数组 a: 5, 9, 20
数组 b: 20, 5
的期望结果是啥?
renmu123
2021 年 8 月 27 日
把 b 变成哈希,然后遍历一遍 a
autoxbc
2021 年 8 月 27 日
```js
return A.map( e => +B.includes(e) )
rrfeng
2021 年 8 月 28 日
b 变 map
a 遍历一遍完事,没有更好的写法了
不同的知识不同语言提供的语法糖了
Rocketer
2021 年 8 月 28 日
得先把 B 变成 Set,否则复杂度就是 O(N2)了。

const bSet = new Set(b);
return a.map(n => bSet.has(n) ? 1 : 0);

复杂度 O(N)
LxExExl
2021 年 8 月 28 日
at work:
```
Vec\map($a, $element ==> C\contains($b, $element ) ? 1 : 0);
```

in leetcode:

build HashSet and iterate array A
eric96
2021 年 8 月 28 日
作业题请自己做
CokeMine
2021 年 8 月 30 日
includes 复杂度是 on 的。可以像楼上那样把它变成 set

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/798433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX