如何交替两个数组中的字符?

2024-04-30

我需要帮助弄清楚如何组合两个字符数组,然后让元素在新数组中交替。给定的数组可以是不同的长度,例如: char1=[B,D] char2 = [c,R,5] 输出应为 char3= [B,c,D,r,5]

char[] ch3 = new char[ch1.length + ch2.length];
int count = 0;
int count2 = 0;
for(int i = 0; i < ch3.length; i++){
    if(i < ch1.length) {
        if(i%2 == 0 || count2 == ch2.length) {
            ch3[i] = ch1[count];
            count++;
        }
    }
    if(i <ch2.length) {
        if(i%2 != 0 || count == ch1.length) {
            ch3[i] = ch2[count2];
            count2++;
        }
    }
}
return ch3;

类似的解决方案由 oleg.cherednik 回答 https://stackoverflow.com/a/64287809/5221149,但不需要慢%余数运算符。

public static int[] alternate(int[] a1, int[] a2) {
    int[] a3 = new int[a1.length + a2.length];
    for (int i1 = 0, i2 = 0, i3 = 0; i3 < a3.length; ) {
        if (i1 < a1.length)
            a3[i3++] = a1[i1++];
        if (i2 < a2.length)
            a3[i3++] = a2[i2++];
    }
    return a3;
}

Tests

System.out.println(Arrays.toString(alternate(
        new int[] { 1, 2, 3 },
        new int[] { 44, 55, 66, 77, 88 })));
System.out.println(Arrays.toString(alternate(
        new int[] { 44, 55, 66, 77, 88 },
        new int[] { 1, 2, 3 })));

Output

[1, 44, 2, 55, 3, 66, 77, 88]
[44, 1, 55, 2, 66, 3, 77, 88]

UPDATE

该算法可以轻松增强以合并多个数组:

public static int[] alternate(int[]... arrays) {
    int[] result = new int[Stream.of(arrays).mapToInt(a -> a.length).sum()];
    int[] ai = new int[arrays.length];
    for (int j = 0; j < result.length; )
        for (int i = 0; i < arrays.length; i++)
            if (ai[i] < arrays[i].length)
                result[j++] = arrays[i][ai[i]++];
    return result;
}

Test

System.out.println(Arrays.toString(alternate(
        new int[] { 1, 2, 3 },
        new int[] { 44, 55, 66, 77, 88 },
        new int[] { 12, 34 },
        new int[] { 5, 6, 7, 8 })));

Output

[1, 44, 12, 5, 2, 55, 34, 6, 3, 66, 7, 77, 8, 88]

UPDATE 2

对于集合也可以这样做:

@SafeVarargs
public static <T> List<T> alternate(Iterable<? extends T>... inputs) {
    List<T> result = new ArrayList<>();
    @SuppressWarnings("unchecked")
    Iterator<? extends T>[] iter = new Iterator[inputs.length];
    for (int i = 0; i < inputs.length; i++)
        iter[i] = inputs[i].iterator();
    for (int prevSize = -1; prevSize < result.size(); ) {
        prevSize = result.size();
        for (int i = 0; i < inputs.length; i++)
            if (iter[i].hasNext())
                result.add(iter[i].next());
    }
    return result;
}

public static <T> List<T> alternate(Collection<? extends Iterable<? extends T>> inputs) {
    @SuppressWarnings("unchecked")
    Iterable<? extends T>[] iterables = inputs.toArray(new Iterable[0]);
    return alternate(iterables);
}

Tests

System.out.println(alternate(
        Arrays.asList(1, 2, 3),
        Arrays.asList(44, 55, 66, 77, 88),
        Arrays.asList(12, 34),
        Arrays.asList(5, 6, 7, 8)));
System.out.println(alternate(Arrays.asList(
        Arrays.asList(1, 2, 3),
        Arrays.asList(44, 55, 66, 77, 88),
        Arrays.asList(12, 34),
        Arrays.asList(5, 6, 7, 8))));

Output

[1, 44, 12, 5, 2, 55, 34, 6, 3, 66, 7, 77, 8, 88]
[1, 44, 12, 5, 2, 55, 34, 6, 3, 66, 7, 77, 8, 88]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何交替两个数组中的字符? 的相关文章

随机推荐

  • 如何在快速人工智能中获得给定测试集的预测并计算准确性?

    我正在尝试加载由导出的学习者learn export 我想针对测试集运行它 我希望我的测试集有标签 以便我可以测量其准确性 这是我的代码 test src TextList from df df path cols texts split
  • 重新审视混合字符串值的字母数字排序

    请注意 我之前提出了一个非常相似的问题 但要求已发生变化 对混合字符串值进行字母数字排序 https stackoverflow com questions 3842719 alphanumeric sort on mixed string
  • TypeScript 中多个互斥参数

    给定以下 JavaScript 函数 function x foo fooId bar barId 我想将其转换为 TypeScript 以便调用者必须传入foo or fooId 但不能两者兼而有之 同样对于bar and barId 例
  • 在 python 中将 blob 保存到文件中

    我正在尝试将通过 ajax 发送的 blob 保存为 python 中的文件 以前经历过这个Python 如何在二进制和 Base 64 之间相互转换 https stackoverflow com questions 5305456 py
  • 如何配置 Ransack Rails Gem 以添加 NULLS LAST 进行排序

    我希望兰萨克总是添加NULLS LAST这会将空值放在排序列的最后 有办法做到这一点吗 我在 github 上开了一个问题 https github com activerecord hackery ransack issues 443 h
  • 从 Windows 命令行连接到 websocket

    是否可以从 Windows 命令行连接到 websocket 我已经从 Mac 终端使用了 WSCAT 但我似乎找不到替代方案 任何帮助 将不胜感激 Windows 中没有内置可与 WebSocket 配合使用的工具 虽然你可以使用teln
  • 在 Java 中从复杂的 HTML 表格中提取数据到二维数组

    如何转换 HTML 表格带有 colspan 和 rowspanJava中的二维数组 矩阵 我在 Python 和 jQuery 中找到了很好的解决方案 但在 Java 中却没有 只有通过 jsoup 的非常简单的表 XSLT 有一种很好的
  • R——对缺失值的二维数据集进行插值的方法

    我目前正在使用 Akima 插值例程来进行二维线性插值 我目前正在尝试通过排除不良数据点和依赖于它们的插值来尽可能地进行线性插值 我不想做任何样条拟合 只是线性插值 我可以想出两种使用现有的 akima 包来做到这一点的方法 通过将二维数据
  • 身份验证错误:无法响应以下任何质询:{} Android - 401 Unauthorized

    身份验证错误 无法响应以下任何质询 Android 401 Unauthorized 我已从此链接参考在 Android 上使用 HttpPost 和 DefaultHttpClient 时出现身份验证错误 https stackoverf
  • 如何使用TortoiseSVN更改密码?

    我需要更改我的 SVN 密码 我正在使用 TortoiseSVN 客户端 我找不到密码更改或添加用户选项 是否可以 是否有任何解决方法或命令行语法来创建 SVN 用户或编辑用户 更改访问 Subversion 的密码 通常这将由您的 Sub
  • html 表单在表单提交时发送 GET 而不是 POST

    请原谅我的网络技能 但我有一个非常基本的问题 我有这个 html 表单 理想情况下应该用 post 调用我的 login url 但由于某种原因 它总是向该 url 发送 get 请求并失败 我不明白这是怎么发生的 这是我的 html 表单
  • 编程 Jersey 资源中的路径参数

    我正在使用 Jersey 的编程 API 描述here https jersey github io documentation latest resource builder html在运行时从配置文件动态创建配置资源 我创建这些资源的代
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • 如何使用plotly包绘制用一种缩放颜色着色的饼图

    我有这个示例数据框 gt Data Produits Pourcentages 1 Cr me de jour 27 10 2 s rum 14 50 3 Cr me de nuit 13 80 4 masque 8 82 5 d maqu
  • 使用 openopenPanel() 方法打开 matAutocomplete

    我正在使用 Angular Material 的垫自动完成 https material angular io components autocomplete overview组件 并根据docs https material angula
  • 使用 ThreeJS 获取球体纹理上的点击位置

    目前 我有一个带有纹理的球体 它绕 y 轴旋转 我还有在 3D 空间中单击的位置 以及球体上的旋转位置 我认为 目标 获取纹理上的位置 例如 我想获取我点击的图像的哪个方块 参见示例球体和下图 在实践中 我不会使用此图像 但我觉得这将是一个
  • 无法在 Linux 中阻止从命名管道 (FIFO) 读取

    很奇怪 我似乎无法完成这项工作 这是我的架构 我有一个命名管道 它将在永远运行 root读取器进程和多个应用程序编写器进程 读者进程必须是blocking当作家们在nonblocking 因此 这就是我在阅读器进程中所做的 该进程将运行ro
  • SQL 错误:1452:无法添加或更新子行:外键约束失败

    我的数据库中有两个表 order course order有一个专栏courseid哪个参考列id of the course桌子 每当我尝试做的时候saveAll in CakePHP以上SQL将显示错误并且不会保存数据 听起来是在数据库
  • Java 中字节数组的位移操作

    如何将字节数组向右移动 n 个位置 例如将 16 字节数组右移 29 个位置 我在某处读到可以使用 long 来完成 会使用这样的长工作 Long k1 0 到 7 的字节数组 Long k2 8 到 15 的字节数组 然后使用 Long
  • 如何交替两个数组中的字符?

    我需要帮助弄清楚如何组合两个字符数组 然后让元素在新数组中交替 给定的数组可以是不同的长度 例如 char1 B D char2 c R 5 输出应为 char3 B c D r 5 char ch3 new char ch1 length