本文主要是介绍【每日刷题】Day59,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【每日刷题】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;
}
这篇关于【每日刷题】Day59的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!