【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序

简介: 【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序

数组能形成多少数对【LC2341】

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

  • nums 选出 两个相等的 整数
  • nums 中 移除这两个整数,形成一个 数对
  • 请你在 nums 上多次执行此操作直到无法继续执行。

返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案,其中 answer[0] 是形成的数对数目,answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。

哈希表

  • 思路:使用哈希表记录某个数字在这之前是否存在,然后遍历每一个数字,如果存在那么可以从nums中移除这两个整数,形成一个 数对;如果不存在那么将哈希表赋值为true。那么剩下的数字为数组长度-2*数对数目

实现

class Solution {
    public int[] numberOfPairs(int[] nums) {
        int n = nums.length;
        boolean[] flag = new boolean[101];
        int[] res = new int[2];
        for (int num : nums){
            if (flag[num]){
                res[0]++;
                flag[num] = false;
            }else{
                flag[num] = true;
            }
        }
        res[1] = n - 2 * res[0];
        return res;
    }
}


复杂度

时间复杂度:O ( n ) ,n为数组长度

空间复杂度:O ( C ) ,C为字符集大小,本题中为101

排序

  • 思路:将数组排序,从数组第一个元素开始遍历,如果nums[i]==nums[i+1],那么可以形成一个数对,指针向后移动两个;否则后移一位
  • 实现
class Solution {
    public int[] numberOfPairs(int[] nums) {
        int n = nums.length;
        int[] res = new int[2];
        Arrays.sort(nums);
        int i = 0;
        while (i < n - 1){
            if (nums[i] == nums[i + 1]){
                res[0]++;
                i += 2;
            }else{
                i++;
            }
        }
        res[1] = n - 2 * res[0];
        return res;
    }
}

复杂度

时间复杂度:O ( n l o g n )  ,n为数组长度

空间复杂度:O ( 1 )  

目录
相关文章
|
8月前
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
61 0
【每日一题Day176】LC2404出现最频繁的偶数元素 | 哈希表
|
8月前
|
存储
【每日一题Day158】LC2395和相等的子数组 | 哈希表
【每日一题Day158】LC2395和相等的子数组 | 哈希表
40 0
|
8月前
|
存储
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
58 0
|
8月前
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
41 0
|
8月前
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
33 0
|
8月前
|
存储 缓存
【每日一题Day336】LC146最近最少使用缓存 | 哈希表+链表
【每日一题Day336】LC146最近最少使用缓存 | 哈希表+链表
57 0
|
8月前
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
【每日一题Day136】LC982按位与为零的三元组 | 哈希表
70 0
|
8月前
|
机器学习/深度学习
【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表
【每日一题Day128】LC2357使数组中所有元素都等于零 | 排序+模拟 哈希表
36 0
|
8月前
|
存储
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
39 0
|
8月前
|
API 索引
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
59 0

热门文章

最新文章

下一篇
开通oss服务