「每日LeetCode」2023年2月16日

本文最后更新于:2023年3月19日 晚上

2341.数组能形成多少数对

2341.数组能形成多少数对

Category Difficulty Likes Dislikes
algorithms Easy (79.80%) 43 -

Tags
Companies
给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤:

  • 从 nums 选出 两个 相等的 整数
  • 从 nums 中移除这两个整数,形成一个 数对

请你在 nums 上多次执行此操作直到无法继续执行。
返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案,其中_ answer[0] _是形成的数对数目,answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。

示例 1:
输入:nums = [1,3,2,1,3,2,2] 输出:[3,1] 解释: nums[0] 和 nums[3] 形成一个数对,并从 nums 中移除,nums = [3,2,3,2,2] 。 nums[0] 和 nums[2] 形成一个数对,并从 nums 中移除,nums = [2,2,2] 。 nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [2] 。 无法形成更多数对。总共形成 3 个数对,nums 中剩下 1 个数字。
示例 2:
输入:nums = [1,1] 输出:[1,0] 解释:nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [] 。 无法形成更多数对。总共形成 1 个数对,nums 中剩下 0 个数字。
示例 3:
输入:nums = [0] 输出:[0,1] 解释:无法形成数对,nums 中剩下 1 个数字。

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

Discussion | Solution

思路

排序后,按题意模拟即可

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* @lc app=leetcode.cn id=2341 lang=javascript
*
* [2341] 数组能形成多少数对
*/

// @lc code=start
/**
* @param {number[]} nums
* @return {number[]}
*/
var numberOfPairs = function (nums) {
let count = 0;
nums.sort();
for (let i = 0; i < nums.length - 1; i++) {
const num = nums[i],
nextNum = nums[i + 1];
console.log(i);
if (num === nextNum) {
count++;
nums.splice(i, 2);
i--;
}
}

return [count, nums.length];
};
// @lc code=end