美文网首页和我一起在LeetCode刷题吧我的大学
和我一起在LeetCode刷题吧(每天一题LeetCode)

和我一起在LeetCode刷题吧(每天一题LeetCode)

作者: 北斗星君 | 来源:发表于2020-02-20 16:07 被阅读0次

分类标签:数组             

难易度:简单

题目描述:

给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为0

示例 1:

输入:n = 5                                        输出:[-7,-1,1,3,4]

解释:这些数组也是正确的 [-5,-1,1,2,3],[-3,-1,2,-2,4]。

示例 2:

输入:n = 3                                        输出:[-1,0,1]

示例 3:

输入:n = 1                                        输出:[0]

思路:

1.返回“任意”一个数组的含义不是返回一个随机的数组,而是指只要是符合要求的数组都算正确的意思,如果理解为返回一个随机数组的话,这个问题就跑偏了;

2.需要注意返回数组的要求:首先是数组中的各个元素是不能相同的,其次是所有元素的和是0;

3.解题思路:根据上面对题目的具体解析,我们可以使用分治的思想,将数组平均分为两个子数组,使得其子数组中的元素分别为负数和正数,且两个子数组中元素和为零。

代码:

int* sumZero(int n, int* returnSize)

{

  *returnSize=n;

    int * res=(int *)calloc(sizeof(int),n);

    int k=0;

//对数组中元素的个数加以讨论,当元素的个数为偶数的情况

  if(n%2==0)                                       

      {

                for(int i=1;i<=n/2;i++)             

                        res[k++]=-i;

                for(int i=1;i<=n/2;i++)

                      res[k++]=i;

        }

//对数组中元素的个数加以讨论,当元素的个数为奇数的情况

  else                                                 

        {

                  for(int i=1;i<=(n-1)/2;i++)

                    res[k++]=-i;

                  for(int i=1;i<=(n-1)/2;i++)

                  res[k++]=i;

                    res[n-1]=0;

        }

                    return res;

}

运行结果:

程序运行结果

相关文章

网友评论

    本文标题:和我一起在LeetCode刷题吧(每天一题LeetCode)

    本文链接:https://www.haomeiwen.com/subject/mtmxqhtx.html