【每日刷题】Day55
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 441. 排列硬币 - 力扣(LeetCode)
2. 455. 分发饼干 - 力扣(LeetCode)
3. 817. 链表组件 - 力扣(LeetCode)
1. 441. 排列硬币 - 力扣(LeetCode)
//思路:减去每一层硬币个数,当减去最后一层硬币后硬币数小于0时说明最后一层不满。
int arrangeCoins(int n)
{
int flag = 1;
int ans = 0;
while(n-flag>=0)
{
n-=flag;
flag++;
ans++;
}
return ans;
}
2. 455. 分发饼干 - 力扣(LeetCode)
//思路:排序遍历。
int findContentChildren(int* g, int gSize, int* s, int sSize)
{
qsort(g,gSize,sizeof(int),compare);
qsort(s,sSize,sizeof(int),compare);
int i = 0;
int j = 0;
int ans = 0;
while(i<gSize&&j<sSize)
{
if(s[j]>=g[i])
{
i++;
j++;
ans++;
}
else
j++;
}
return ans;
}
3. 817. 链表组件 - 力扣(LeetCode)
//思路:哈希表。遍历数组nums,将数组nums中的元素在哈希表中标为1。遍历链表,定义一个flag变量用于确定在遇到非组件元素前是否有组件元素。当链表当前元素是组件元素时,flag置为1,继续往下遍历;当链表当前元素不是组件元素时,判断flag是否为1,(为1说明前面有组件元素,ans++;否则,说明没有),为1,ans++,flag置为0。
typedef struct ListNode LN;
int numComponents(struct ListNode* head, int* nums, int numsSize)
{
int flag = 0;
int hash[10003] = {0};
for(int i = 0;i<numsSize;i++)
{
hash[nums[i]] = 1;//标记nums数组中的元素
}
int ans = 0;
LN* pmove = head;
while(pmove)//遍历链表
{
if(hash[pmove->val]==1)//当前元素为组件元素
flag = 1;
else if(flag)//遇到非组件元素判断前面是否有组件
{
ans++;
flag = 0;
}
pmove = pmove->next;
}
if(flag)//出了循环flag为1,说明最后一个元素也是组件
ans++;
return ans;
}