977
自己手写快排没有qsort快,这题目只需要平方一下排序就好。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int* sortedSquares(int* nums, int numsSize, int* returnSize){
*returnSize = numsSize;
for (int i = 0; i < numsSize; ++i)
nums[i] = nums[i] * nums[i];
qsort(nums,numsSize,sizeof(int),comp);
return nums;
}
268
也是很容易的一道题目,使用qsort排序
判断 i 是否等于 数组元素 即可
int comp (const int *a,const int *b)
{
return *a - *b;
}
int missingNumber(int* nums, int numsSize){
int n = numsSize;
qsort(nums,numsSize,sizeof(int),comp);
for (int i = 0; i < n; ++i)
if (i != nums[i])
{
n = i;
break;
}
return n;
}
1877
排序后,头尾相加即可,利用贪心思想,当然,这是正确的。只需要用四个数推理一下
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int minPairSum(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int),cmp);
int max = 0;
for (int i = 0,j = numsSize - 1; i < j; ++i,--j)
{
if (nums[i] + nums[j] > max)
max = nums[i] + nums[j];
}
return max;
}
950
用一个数组模拟队列,每次新进来一个一个元素,队头就排到队尾。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int* deckRevealedIncreasing(int* deck, int deckSize, int* returnSize){
*returnSize = deckSize;
qsort(deck,deckSize,sizeof(int),cmp);
int *queue = (int *)malloc(5000 * sizeof(int));
int front = -1,rear = -1;
for (int i = deckSize - 1; i >= 0; --i)
{
queue[++rear] = deck[i];
queue[++rear] = queue[++front];
}
queue[++rear] = deck[0];
for (int i = deckSize - 1; front <= rear && i >= 0; --i)
{
deck[i] = queue[front++];
}
return deck;
}
// 2 3 5 7 11 13 17
// 13 17