共享数组原地逆置

这篇博客介绍了一道面试题目,要求在已知的一维数组A[m+n]中,原地逆置两个线性表的位置。通过三步操作:字母序列逆置、数字序列逆置和整体逆置,实现了空间复杂度为O(1)的解决方案。作者提供了逆置函数的代码,并展示了测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶然在一本书上看到这样一道题觉得听一意思的就拿来做了一下,题目是这样设置的
在已知一维数组A[m+n]中一次存放两个线性表(a1,a2,a3,a4…am),(b1,b2,b3…bn),试写出一个函数将两个顺序表位置互换,即由(a,1,a2,a3,a4...am,b1,b2,b3...bn)转换成(b1,b2,b3...bn,a,1,a2,a3,a4...am)要求空间复杂度为O(1)想必这种题会经常出现在面试题目中吧,哈哈,扯远了,以下是我的答案,水平有限,如有纰漏还望各位大神不吝赐教。

乍一看题目还挺麻烦的,两个数组大小不一样,原地逆置循环次数不容易控制,换个思路重新整理一下发现可以用一种很巧妙的方法分三步实现
第一步:将字母序列逆置
第二部:将数字序列逆置
第三部:将数组整体逆置
其中逆置函数如下:
逆置函数需要两个参数,分别为需要逆置的数组起始位置[start]和终止位置[end];

    public static void reverse(int start,int end){//逆置函数
        char temp;
        while(start<end) {
            temp = array[start];
            array[start++] = array[end];
            array[end--] = temp;
        }
    }

tip:char array[]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’1’,’2’,’3’,’4’}
测试数组A[0-7],B[8-11]

测试结果如下:
image.png

完整代码

public class Main {
    public static char array[]={'A','B','C','D','E','F','G','H','1','2','3','4'};
    public static void main(String[] args) {
        reverse(0,7);//逆置字母序列结果为:HGFEDCBA1234
        reverse(8,11);//逆置数字序列结果为:HGFEDCBA4321
        reverse(0,11);//整体逆置结果为:1234ABCDEFG
        print(array);
    }
    public static void reverse(int start,int end){//逆置函数
        char temp;
        while(start<end) {
            temp = array[start];
            array[start++] = array[end];
            array[end--] = temp;
        }
    }
    private static void print(char[] array) {
        for (int i = 0; i <array.length; i++)
            System.out.print(array[i]);
        System.out.println();
    }
}
更多关于java的文章请戳这里:(您的留言意见是对我最大的支持)

我的文章列表
Email:sxh13208803520@gmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值