Leetcode -2

2023-12-15 05:28:22

Leetcode -441.排列硬币

题目:你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。
阶梯的最后一行 可能 是不完整的。

给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。

示例 1:
输入:n = 5
输出:2
解释:因为第三行不完整,所以返回 2 。

示例 2:
输入:n = 8
输出:3
解释:因为第四行不完整,所以返回 3 。

		int arrangeCoins(int n)
		{
		    //i即表示第i行,又表示第i行有几个硬币;i一开始默认为第一行
		    int i = 1;
		    while (n > 0)
		    {
		        //n每次减去i,如果n减完等于0,说明正好够减,这一行刚好完整,就返回这一层
		        //如果n减完i小于0,说明上一层减完i剩下的n不够这一行的i减,所以这一行是不完整的,要返回上一层
		        n -= i;
		        if (n == 0)
		            return i;
		
		        else if (n < 0)
		            return i - 1;
		
		        //每循环一次就进入下一层
		        i++;
		    }
		    return 0;
		}

Leetcode - 448.找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间[1, n] 内。
请你找出所有在[1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

示例 1:
输入:nums = [4, 3, 2, 7, 8, 2, 3, 1]
输出:[5, 6]

示例 2:
输入:nums = [1, 1]
输出:[2]

提示:
n == nums.length
1 <= n <= 10^5
1 <= nums[i] <= n

		int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
		{
		    int* ans = (int*)malloc(sizeof(int) * numsSize);
		    int len = 0;
		    int hash[100000] = { 0 };
		
		    //遍历这个数组,以数组中的元素作为hash数组的下标,并赋予1,表明这个数已经出现过
		    for (int i = 0; i < numsSize; i++)
		    {
		        hash[nums[i]] = 1;
		    }
		
		    //遍历hash数组的下标,从1到数组的长度,如果有等于0的,说明在数组中没出现过,返回这个下标
		    for (int i = 1; i <= numsSize; i++)
		    {
		        if (hash[i] == 0)
		        {
		            ans[len++] = i;
		        }
		    }
		
		    //返回长度
		    *returnSize = len;
		    return ans;
		}

文章来源:https://blog.csdn.net/YoungMLet/article/details/135007386
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。