首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >脚撕LeetCode(1470)Easy

脚撕LeetCode(1470)Easy

作者头像
JathonKatu
发布2021-07-14 15:33:28
发布2021-07-14 15:33:28
3770
举报
文章被收录于专栏:JathonKatuJathonKatu

题目地址:https://leetcode-cn.com/problems/shuffle-the-array/

给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。 示例 1: 输入:nums = [2,5,1,3,4,7], n = 3 输出:[2,3,5,4,1,7] 解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7] 示例 2: 输入:nums = [1,2,3,4,4,3,2,1], n = 4 输出:[1,4,2,3,3,2,4,1] 示例 3: 输入:nums = [1,1,2,2], n = 2 输出:[1,2,1,2]

提示: 1 <= n <= 500 nums.length == 2n 1 <= nums[i] <= 10^3

这道题的思路就是,给你一个数组,把前半段和后半段交叉组合,比如前半段是x1,x2...xn,后半段是y1,y2…yn,则返回x1,y1,x2,y2…xn,yn。

一、爆破法

因为不想直接新增一个数组,所以我们还是用比较愚蠢的办法。

我们用前后段交换位置,然后左右指针往中间缩短一位,再交换,如此往复。

执行结果如下:

53 / 53 个通过测试用例

状态:通过

执行用时: 5 ms

内存消耗: 38.8 MB

代码语言:javascript
复制
public int[] shuffleMe2(int[] nums, int n) {
    int l=1;
    int r = nums.length-2;
    while(l < n) {
        swap(nums, l, r, n);
        l++;
        r--;
    }
    return nums;
}

public void swap(int[] nums, int l, int r,int n) {
    int temp;
    while (n<=r) {
        temp = nums[l];
        nums[l] = nums[n];
        nums[n] = temp;
        l++;
        n++;
    }
}

时间和内存都不尽如人意。。。

好吧,我们还是聪明点。

二、新数组读取老数组法

用新数组,按照规则读取老数组然后返回新数组

执行结果如下:

53 / 53 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 38.7 MB

代码语言:javascript
复制
public int[] shuffleMe(int[] nums, int n) {
    int index = 0;
    int[] result = new int[nums.length];
    for (int i = 0; i < n; i++) {
        result[index++] = nums[i];
        result[index++] = nums[n+i];
    }
    return result;
}

代码量少了很多,时间也是100%,但是内存还是不满意,我们继续看看评论区。

好吧,评论区基本也都是新增数组,那么,我们next。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档