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

含重复元素的子集生成

在这里插入图片描述

求解思路

当数组中存在重复元素时,暴力枚举会产生大量重复子集。这里把"是否选择某个元素"的问题,转化为"选择该元素几个"的问题,自然避免了重复。

代码实现详解

public static List<List<Integer>> subsetsWithDup(int[] nums) {List<List<Integer>> ans = new ArrayList<>();Arrays.sort(nums);  // 排序让相同元素聚在一起f(nums, 0, new int[nums.length], 0, ans);return ans;
}public static void f(int[] nums, int i, int[] path, int size, List<List<Integer>> ans) {if (i == nums.length) {// 到达边界,收集当前路径ArrayList<Integer> cur = new ArrayList<>();for (int j = 0; j < size; j++) {cur.add(path[j]);}ans.add(cur);} else {// 找到下一组不同元素的起始位置int j = i + 1;while (j < nums.length && nums[i] == nums[j]) {j++;}// 决策1: 当前这组数,一个都不要f(nums, j, path, size, ans);// 决策2: 当前这组数,要1个、2个、3个...for (; i < j; i++) {path[size++] = nums[i];f(nums, j, path, size, ans);}}
}

如果觉得有帮助,欢迎点赞、关注、转发~

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

相关文章:

  • 基于802.11的无线mesh网状网络
  • 公司官网网站建设wordpress 上传权限设置
  • 宿州高端网站建设公司哪家好wordpress启动命令
  • 水果套餐网站牡丹江seo
  • 微网站制作速成法网站建设哪家有实力
  • 建设官网站外国手机网站设计
  • 做交流网站网站qq访客记录原理
  • 网站设计赚钱吗帮别人做网站的合作协议
  • 柬埔寨做网站山东烟台城乡建设学校官方网站
  • 如何在供应商报价超出预算后重新谈判
  • 邙山郑州网站建设黑马培训
  • 网站代运营价格网店运营推广高级实训教程
  • 上海网站建设联系电话wordpress 数据库删除
  • 5.4、Python-数据的拼接
  • 简述网站开发建设的基本流程品牌设计的意义
  • 网站搜索栏怎么做织梦网站后台模版更换
  • 免费建设手机网站电子商务网站购物车怎么做
  • RC阻尼与RCD吸收电路
  • 网站免费空间网易企业邮箱和网易邮箱的区别
  • Linux下的花式「隔空」文件传输魔法
  • 建设广州公司网站甘肃建设体网站
  • 公司建设网站带来什么小程序官网平台入口
  • 相机与动画 - 3:
  • 网站后台登陆模板如何做推广引流赚钱
  • 汇编语言编译器的作用 | 提高程序执行效率与底层控制能力
  • 余姚做百度网站建设摹客 2023年设计师必备设计工具
  • 基于STM32F103驱动AD7124-8 24Bit 多通道ADC数据采集模块采集信号
  • wordpress模板做seo排名好的网站
  • 分库分表3-非分片键查询问题与规避方案
  • 网站设计 三把火科技seo上海培训