分类标签:数组
难易度:简单
题目描述:
给你一个整数 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;
}
网友评论