当前位置: 首页 > news >正文

DAY 34 leetcode 349--哈希表.两个数组的交集

题号349

我尝试硬解失败

/*class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int n1=nums1.length;
        int n2=nums2.length;
        int size=Math.min(n1,n2);
        int []arr=new int[size];
        
        int count=0;
        for(int i=0;i<n1;i++){
            outerloop:
            for(int j=0;j<n2;j++){
                if(nums1[i]==nums2[j]){
                    for(int k=0;k<count;k++){
                        if(nums1[i]==arr[k])
                        break outerloop;
                    }
                    arr[count]=nums1[i];
                    count++;
                    break;
                }
            }
        }
        return arr;
    }
}*/

因为返回的数组会带有默认的0无法消除

另解:使用哈希集合

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int n1=nums1.length;
        int n2=nums2.length;
        //创建哈希集合
        Set <Integer> set1=new HashSet<Integer>();
        Set <Integer> set2=new HashSet<Integer>();
        for(int num:nums1){
            set1.add(num);
        }
        for(int num:nums2){
            set2.add(num);
        }
        return getIntersection(set1,set2);
    }
    public int [] getIntersection(Set<Integer>set1,Set<Integer>set2){
        //保证set1是较小的集合
        if(set1.size()>set2.size())
        return getIntersection(set2,set1);
        Set <Integer> newSet=new HashSet <Integer>();
        for(int num:set1){
            if(set2.contains(num))//自带的函数
            newSet.add(num);
        }
        //创建一个数组便于返回
        int []arr=new int[newSet.size()];
        int count=0;
        for(int num:newSet){
            arr[count++]=num;
        }
        return arr;
    }
}

再另解:改进我的解法

我的解法之所以失败是因为数组长度固定,默认值会导致错误,而Java中可以用列表数据类型来代替,其长度可变,最后返回时再转为数组即可

而可以改进的地方在于,这种解法,先用哈希集合把set1元素记录,然后再遍历set2,如果发现有相同元素则在哈希集合中把该值删除,并加入列表中。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        
        Set <Integer> set=new HashSet <Integer>();
        for(int num:nums1){
            set.add(num);
        }
        List <Integer>list=new ArrayList<>();
        for(int num:nums2){
            if(set.remove(num))//有 则顺手删除
            list.add(num);
        }
        //将列表转为数组
        int []arr=new int[list.size()];
        int count=0;
        for(int num:list){
            arr[count++]=num;
        }
        return arr;
    }
}

http://www.dtcms.com/a/107503.html

相关文章:

  • 【Linux网络与网络编程】04.TCP Socket编程
  • BUUCTF-web刷题篇(7)
  • 软件工程面试题(二十四)
  • 【C++重点】deque
  • linux内核漏洞检测利用exp提权
  • Echarts 地图下钻实现过程记录
  • Bootstrap 表格:高效布局与动态交互的实践指南
  • Java8 到 Java21 系列之 Lambda 表达式:函数式编程的开端(Java 8)
  • 深入剖析 Hive Fetch 抓取机制:原理、优化与实践
  • 【Axure元件分享】月份范围选择器
  • msvcr110.dll丢失的几种修复方法指南,msvcr110.dll是什么文件
  • 第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
  • 10.使用路由缓存提升性能
  • DHT11数字温湿度传感器驱动开发全解析(下) | 零基础入门STM32第八十八步
  • emqx中LwM2M
  • 第七天 - re正则表达式模块 - 日志文件模式匹配 - 练习:Nginx日志分析器
  • 企业数据治理实践:“七剑” 合璧,释放数据价值
  • python string 类型字符拼接 +=的缺点,以及取代方法
  • python/pytorch杂聊
  • Nature旗下 | npj Digital Medicine | 图像+转录组+临床变量三合一,多模态AI预测化疗反应,值得复现学习的完整框架
  • 大智慧前端面试题及参考答案
  • 爬虫【feapder框架】
  • 【LeetCode基础算法】二叉树所有类型
  • ESLint语法报错
  • Mysql基础笔记
  • 论文:Generalized Category Discovery with Clustering Assignment Consistency
  • 获取各类基本因子
  • day21和day22学习Pandas库
  • Ray Flow Insight:让分布式系统调试不再“黑盒“
  • 【模型部署】onnx模型-LOOP 节点实例