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

leetcode2248. 多个数组求交集

一、题目描述

给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。

示例 1:

输入:nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
输出:[3,4]
解释:
nums[0] = [3,1,2,4,5],nums[1] = [1,2,3,4],nums[2] = [3,4,5,6],在 nums 中每个数组中都出现的数字是 3 和 4 ,所以返回 [3,4] 。
示例 2:

输入:nums = [[1,2,3],[4,5,6]]
输出:[]
解释:
不存在同时出现在 nums[0] 和 nums[1] 的整数,所以返回一个空列表 [] 。

提示:

1 <= nums.length <= 1000
1 <= sum(nums[i].length) <= 1000
1 <= nums[i][j] <= 1000
nums[i] 中的所有值 互不相同

二、题目解析

1、双指针

class Solution {public List<Integer> intersection(int[][] nums) {//当nums长度为1,需确保第一个元素是有序的Arrays.sort(nums[0]);int[] array = nums[0];for(int i = 1;i < nums.length;i++){array = intersect(array,nums[i]);}List<Integer> res = new ArrayList();for(int i = 0;i < array.length;i++){res.add(array[i]);}return res;}public int[] intersect(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int i = 0,j = 0,end = 0;int[] res = new int[nums1.length + nums2.length];while(i < nums1.length && j < nums2.length){if(nums1[i] < nums2[j]){i++;}else if(nums1[i] > nums2[j]){j++;}else{//不存在重复元素故不需特殊判断res[end++] = nums1[i];i++;j++;}}//截取数组并进行复制:copyOfRange(int []original,int from,int to),original为原始的int型数组,from为开始角标值,to为终止角标值。(其中包括from角标,不包括to角标。即处于[from,to)状态)return Arrays.copyOfRange(res,0,end);}
}

在这里插入图片描述
2、set
set1.retainAll(set2)方法可快速找到两个set相同元素,并去除set1中非二者交集元素

class Solution {public List<Integer> intersection(int[][] nums) {Set<Integer>set=new HashSet<>();for(int i:nums[0]) {set.add(i);}for(int i=1;i<nums.length;i++) {Set<Integer>set2=new HashSet<>();for(int j:nums[i]) {set2.add(j);}set.retainAll(set2);}List<Integer>ans=new ArrayList<>(set);Collections.sort(ans);return ans;}
}

在这里插入图片描述
3、统计元素出现的次数

class Solution {public List<Integer> intersection(int[][] nums) {int len = 1001;int[] array = new int[len];for (int i = 0; i < nums.length; i++){for (int j = 0; j < nums[i].length; j++){array[nums[i][j]]++;}}List<Integer> ans = new LinkedList<>();for (int i = 1; i < len; i++){if (array[i] == nums.length){ans.add(i);}}return ans;}
}

在这里插入图片描述

http://www.xdnf.cn/news/18193.html

相关文章:

  • Android13车机系统自定义系统栏显示策略之状态栏下拉异常
  • java八股文-中间件-参考回答
  • Commons-io
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(六)
  • 笔试——Day43
  • HJ4 字符串分隔
  • C++高频知识点(二十七)
  • CentOS安装SNMPWalk
  • 无畏契约手游上线!手机远控模拟器畅玩、抢先注册稀有ID!
  • Linux的基本操作
  • 遥感amp;机器学习入门实战教程 | Sklearn 案例③:PCA + SVM / 随机森林 对比与调参
  • LAMP架构编译安装部署
  • 垂直领域大模型构建:法律行业“类ChatGPT”系统的训练与落地
  • PythonDay31
  • Vue2+Vue3前端开发_Day1
  • Fragment重要知识点总结
  • Incredibuild 新增 Unity 支持:击破构建时间过长的痛点
  • 机器学习(决策树2)
  • MVVM开源项目
  • Netty处理粘包与拆包
  • vue使用vue-cropper实现图片裁剪之单图裁剪
  • 关于mybatis表关联查询和mybatis-Plus单表查询传入时间查询数据(走索引)
  • Linux Namespace 隔离的“暗面”——故障排查、认知误区与演进蓝图
  • CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
  • 【HTML】3D动态凯旋门
  • 通过C#上位机串口写入和读取浮点数到stm32的片内flash实战4(通过串口下发AD9833设置值并在上位机显示波形曲线)
  • “你不干有的是AI干”,提示词中的“情感化提示”
  • 如何在 Ubuntu Linux 上安装 RPM 软件包
  • 【SQL优化案例】统计信息缺失