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; }