【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】

2024-03-01 09:49:47 浏览数 (1)

Leetcode -441.排列硬币

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

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

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

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

代码语言:javascript复制
		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

代码语言:javascript复制
		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;
		}

0 人点赞