LeetCode刷题笔记(简单)---重新排列数组(C语言)

题目如下:
在这里插入图片描述
题目的意思其实比较清楚了:重新排列的数组中,偶数位置的元素从n开始,奇数位置从0开始
故而有如下代码:

int* shuffle(int* nums, int numsSize, int n, int* returnSize){
    int *results = (int *)malloc(numsSize * sizeof(int));//重新分配内存
    int count=2;//用于控制区分偶数位和奇数位
    for(int k=0,i=0,j=n;k<numsSize;k++)//i从0开始,j从n开始
    {
        if(count%2==0)//如果是偶数位(包括0)
        {
            results[k]=nums[i];//从0开始计数
            i++;
        }
        else//如果是奇数位
        {
            results[k]=nums[j];//从n开始计数
            j++;
        }
        count++;//奇偶交替
    }
    *returnSize = numsSize;
    return results;//返回结果数组
}

在这里插入图片描述

这题虽然简单,可有时候越是简单的题目越考验逻辑。刚开始做的时候脑子没反应过来,把i和j放到for循环的条件里去了,结果一直得不到想要的答案,然后把i和j单独分开,分别执行++操作,这才是正确的逻辑。


然后看了一下题解,发现了一个更为简洁的写法:

int* shuffle(int* nums, int numsSize, int n, int* returnSize){
    int* res=(int*)malloc(sizeof(int)*numsSize);
    *returnSize=numsSize;
    for(int i=0;i<n;i++){
        res[2*i]=nums[i];
        res[2*i+1]=nums[n+i];
        //0->0 1->2 2->4 3->6 nums[i]->nums[2i]
        //4(0)->1 5(1)->3 6(2)->5 7(3)->7 nums[4+i]->nums[2*i+1]
        //[0,1,2,3,0,1,2,3]
        //[0,0,1,1,2,2,3,3]
    }
    return res;
}

作者:fu-chen-h
链接:https://leetcode-cn.com/problems/shuffle-the-array/solution/cyu-yan-9241-6062-by-fu-chen-h-biai/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

核心就在于两行:
在这里插入图片描述
唉,是我又想复杂了,这个规律竟然没发现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值