【每日刷题】Day59
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 1103. 分糖果 II - 力扣(LeetCode)
2. 1051. 高度检查器 - 力扣(LeetCode)
3. 1137. 第 N 个泰波那契数 - 力扣(LeetCode)
1. 1103. 分糖果 II - 力扣(LeetCode)
//思路:循环遍历。当遍历到最后一个人时判断是否还有糖果,还有则从头继续从第一个人开始分糖果。当糖果分完或不够当前应该分的数量时时退出循环并将剩余糖果全部给出。
int* distributeCandies(int candies, int num_people, int* returnSize)
{
int* ans = (int*)calloc(num_people,sizeof(int));
int count = 0;
int flag = 1;
int size = 0;
for(int i = 0;i<num_people;i++)
{
if(candies-flag>=0)
candies-=flag;
else
{
ans[count++] += candies;
break;
}
ans[count++] += flag++;
if(i==num_people-1&&candies>0)
{
count = 0;
i = -1;
}
}
*returnSize = num_people;
return ans;
}
2. 1051. 高度检查器 - 力扣(LeetCode)
//思路:排序+遍历。
//记数排序
void CountSort(int* arr, int n)
{
int min = 0;
int max = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] < arr[min])
min = i;
if (arr[i] > arr[max])
max = i;
}
int x = arr[min];
int y = arr[max];
int* tmp = (int*)calloc(y - x + 1, sizeof(int));
for (int i = 0; i < n; i++)
{
tmp[arr[i] - x] += 1;
}
int count = 0;
for (int i = 0; i < (y - x + 1); i++)
{
while (tmp[i])
{
arr[count++] = i + x;
tmp[i]--;
}
}
}
int heightChecker(int* heights, int heightsSize)
{
int arr[101] = {0};
memcpy(arr,heights,sizeof(int)*heightsSize);
CountSort(heights,heightsSize);
int ans = 0;
for(int i = 0;i<heightsSize;i++)
{
if(arr[i]!=heights[i])
ans++;
}
return ans;
}
3. 1137. 第 N 个泰波那契数 - 力扣(LeetCode)
//思路:动态规划。每三个为一组创建斐波那契数列组。
int tribonacci(int n)
{
if(n==0)
return 0;
if(n<=2)
return 1;
int flag1 = 0;
int flag2 = 0;
int flag3 = 1;
int ans = 1;
for(int i = 3;i<=n;i++)
{
flag1 = flag2;
flag2 = flag3;
flag3 = ans;
ans = flag1+flag2+flag3;
}
return ans;
}