V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tlerbao
V2EX  ›  问与答

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

  •  
  •   tlerbao · 2021-08-27 22:50:17 +08:00 · 1129 次点击
    这是一个创建于 1188 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有数组 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 数组。

    11 条回复    2021-08-30 03:58:53 +08:00
    tlerbao
        1
    tlerbao  
    OP
       2021-08-27 23:03:29 +08:00
    忘说语言了,js,php 都行;请教优雅写法。
    tlerbao
        2
    tlerbao  
    OP
       2021-08-27 23:14:23 +08:00
    ```
    // 我写的
    $a = [5,9,20];
    $b = [5,20];
    return array_map(function ($aaa) use ($b) {
    return $ccc[] = in_array($aaa, $b) ? 1 : 0;
    }, $a);
    ```
    marat1ren
        3
    marat1ren  
       2021-08-27 23:14:47 +08:00 via iPhone
    用异或计算,结果为 0 则两个数相同。
    kyuuseiryuu
        4
    kyuuseiryuu  
       2021-08-27 23:26:44 +08:00 via iPhone
    数组 a: 5, 9, 20
    数组 b: 20, 5
    的期望结果是啥?
    renmu123
        5
    renmu123  
       2021-08-27 23:29:10 +08:00 via Android
    把 b 变成哈希,然后遍历一遍 a
    autoxbc
        6
    autoxbc  
       2021-08-27 23:30:31 +08:00
    ```js
    return A.map( e => +B.includes(e) )
    rrfeng
        7
    rrfeng  
       2021-08-28 00:13:07 +08:00 via Android
    b 变 map
    a 遍历一遍完事,没有更好的写法了
    不同的知识不同语言提供的语法糖了
    Rocketer
        8
    Rocketer  
       2021-08-28 00:20:50 +08:00 via iPhone
    得先把 B 变成 Set,否则复杂度就是 O(N2)了。

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

    复杂度 O(N)
    LxExExl
        9
    LxExExl  
       2021-08-28 04:49:55 +08:00
    at work:
    ```
    Vec\map($a, $element ==> C\contains($b, $element ) ? 1 : 0);
    ```

    in leetcode:

    build HashSet and iterate array A
    eric96
        10
    eric96  
       2021-08-28 11:57:58 +08:00
    作业题请自己做
    CokeMine
        11
    CokeMine  
       2021-08-30 03:58:53 +08:00 via Android
    includes 复杂度是 on 的。可以像楼上那样把它变成 set
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.