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

算法leetcode|90. 子集 II(rust重拳出击)


文章目录

  • 90. 子集 II:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


90. 子集 II:

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

样例 1:

输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

样例 2:

输入:nums = [0]输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 穷举数组的所有子集,每个数组元素都有被选择和不被选择两种情况,所以总的子集数量应该是 2n 个。
  • 数组中有重复元素,所以简单的按照选择不选择两种情况处理所有数组元素就会导致出现重复的子集,而题目是要求结果中不能包含重复子集的。
  • 简单的构建子集,然后判断子集是否已经在结果集中,当然是可行的,但是效率低下。
  • 先排序就可以用另一种方式去重,排序后相同的重复数组元素都会挨在一起,我们让选择某个数组元素值,变成计数,因为选其中任意一个都是相同的,同样选任意两个也是相同的,同理,相同元素选择任意多个,都与顺序位置无关,只与选择的个数有关。我们假定要求按照排序顺序选择,前面的选择了,后面的才有可能选择,这样就可以保证选择的数量不会重复,如果选择第二个,那么第一个一定也选择了,这也是选择两个的唯一方式,如果某个元素有三个,选择第三个时,必须前两个也都是选择的,不能选择任意位置的相同元素,这样就可以保证个数决定位置,从而达到去重的效果。
  • 另外,排序不是目的,只是为了方便去重,这种情况,二当家的认为用计数排序是最好的,尤其是元素种类提前知道,并且较少的情况。

题解:

rust:

impl Solution {pub fn subsets_with_dup(nums: Vec<i32>) -> Vec<Vec<i32>> {let mut ans = Vec::new();let mut nums = nums;// 排序nums.sort();let n = nums.len();// 每一个数都有选择和不选2种情况,穷举所有可能(0..(1 << n)).for_each(|mask| {let mut row = Vec::new();let mut flag = true;for i in 0..n {if (mask & (1 << i)) != 0 {if i > 0 && nums[i] == nums[i - 1] && (mask & (1 << (i - 1))) == 0 {// 配合排序去重(上一个数没选,这一个也不选,否则就和之前选择上一个的分支发生重复)flag = false;break;}row.push(nums[i]);}}if flag {ans.push(row);}});return ans;}
}

go:

func subsetsWithDup(nums []int) [][]int {var ans [][]int// 排序sort.Ints(nums)n := len(nums)outer:// 每一个数都有选择和不选2种情况,穷举所有可能for mask := 0; mask < (1 << n); mask++ {var row []intfor i, v := range nums {if mask&(1<<i) > 0 {// 配合排序去重(上一个数没选,这一个也不选,否则就和之前选择上一个的分支发生重复)if i > 0 && v == nums[i-1] && (mask&(1<<(i-1))) == 0 {continue outer}row = append(row, v)}}ans = append(ans, row)}return ans
}

c++:

class Solution {
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<vector<int>> ans;// 排序sort(nums.begin(), nums.end());int n = nums.size();// 每一个数都有选择和不选2种情况,穷举所有可能for (int mask = 0; mask < (1 << n); ++mask) {vector<int> row;bool flag = true;for (int i = 0; i < n; ++i) {if (mask & (1 << i)) {// 配合排序去重(上一个数没选,这一个也不选,否则就和之前选择上一个的分支发生重复)if (i > 0 && nums[i] == nums[i - 1] && (mask & (1 << (i - 1))) == 0) {flag = false;break;}row.emplace_back(nums[i]);}}if (flag) {ans.emplace_back(row);}}return ans;}
};

python:

class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:ans = []# 排序nums.sort()n = len(nums)# 每一个数都有选择和不选2种情况,穷举所有可能for mask in range(1 << n):flag = Truerow = []for i in range(n):if mask & (1 << i):# 配合排序去重(上一个数没选,这一个也不选,否则就和之前选择上一个的分支发生重复)if i > 0 and nums[i] == nums[i - 1] and (mask & (1 << (i - 1))) == 0:flag = Falsebreakrow.append(nums[i])if flag:ans.append(row)return ans

java:

class Solution {public List<List<Integer>> subsetsWithDup(int[] nums) {final List<List<Integer>> ans = new ArrayList<>();// 排序Arrays.sort(nums);final int n = nums.length;// 每一个数都有选择和不选2种情况,穷举所有可能for (int mask = 0; mask < (1 << n); ++mask) {final List<Integer> row  = new ArrayList<>();boolean             flag = true;for (int i = 0; i < n; ++i) {if ((mask & (1 << i)) != 0) {// 配合排序去重(上一个数没选,这一个也不选,否则就和之前选择上一个的分支发生重复)if (i > 0 && nums[i] == nums[i - 1] && (mask & (1 << (i - 1))) == 0) {flag = false;break;}row.add(nums[i]);}}if (flag) {ans.add(row);}}return ans;}
}

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


相关文章:

算法leetcode|90. 子集 II(rust重拳出击)

文章目录 90. 子集 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 90. 子集 II&#xff1a; 给你一个整数数组 nums &#xff0c;其…...

git 泄露

得到flag有两种方法&#xff1a; 1、版本比对&#xff1a;git diff 用法&#xff1a;git diff <分支名1> <分支名2> 2、版本回退&#xff1a;git reset 用法&#xff1a;git reset --hard <分支名> python2 GitHack.py http://www.example.com/.git/ g…...

Elasticsearch知识

目录 Elasticsearch逻辑设计和物理设计 逻辑设计物理设计Elasticsearch原理 倒排索引文档的分析过程保存文档搜索文档写数据的底层原理 数据刷新&#xff08;fresh&#xff09;事务日志的写入ES在大数据量下的性能优化 文件系统缓存优化数据预热文档&#xff08;Document&…...

极智芯 | 解读国产AI算力天数智芯产品矩阵

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 解读国产AI算力天数智芯产品矩阵。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 天数智芯属于国产 GPGPU 阵…...

使用 OpenCV 发现圆角矩形的轮廓

OpenCV - 如何找到圆角矩形的矩形轮廓? 问题: 在图像中,我试图找到矩形对象的圆角轮廓。然而,我对两者的尝试 HoughLinesP 并 findContours 没有产生预期的结果。 我的目标是找到一个类似于以下形状的矩形: 。 代码: import cv2 import matplotlib.pyplot as plt…...

vscode项目推送到git

1、打开项目文件 打开文件后点击vs code左侧工具栏中第三个源代码管理图标&#xff0c;点击初始化仓库&#xff0c;此时会创建一个本地仓库会检查该项目中的文件变更 2、创建远程仓库 点击克隆/下载&#xff0c;复制HTTPS地址 3、添加远程地址 1&#xff09;图形化操作 2…...

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86...

【随笔记录】VMware搭建python开发环境

Vmware虚拟机总是连接不到网络。 环境为&#xff1a;笔记本WLAN 解决方法。 1.直接使用VMware 编辑->虚拟网络编辑器->恢复默认设置。 2.取消网卡的IP的dhcp获取&#xff0c;改为static。网关为提供IP的主机的网络IP&#xff08;NAT模式&#xff09; 3.windows打开共享网…...

基于C++实现水仙花数

1、水仙花数的连营 1.1、水仙花数 在学习程序设计课程时&#xff0c;大多数读者一定采用循环结构编写过求解水仙花数的程序。 【实例 1-1】水仙花数 一个三位整数&#xff08;100&#xff5e;999&#xff09;&#xff0c;若各位数的立方和等于该数自身&#xff0c;则称其为“…...

关于一个类中引用两外一个类中的变量和方法,一个技巧可以提高开发效率

import static com.xx.xx.util.ext.xx.toJson; import static com.xx.xx.util.ext.smf.Cert.certMgrClient; 第一个引用一个方法&#xff0c;第二个引用一个变量&#xff0c; 引用后就可以直接通过变量名或者方法名就行使用&#xff0c;很方便&#xff0c;不要通过class.方式调…...

算法笔记:OPTICS 聚类

1 基本介绍 OPTICS(Ordering points to identify the clustering structure)是一基于密度的聚类算法 OPTICS算法是DBSCAN的改进版本 在DBCSAN算法中需要输入两个参数&#xff1a; ϵ 和 MinPts &#xff0c;选择不同的参数会导致最终聚类的结果千差万别&#xff0c;因此DBCSAN…...

SSRF漏洞防御:黑白名单的编写

文章目录 SSRF漏洞防御:黑白名单的编写黑名单的制作白名单的制作 SSRF漏洞防御:黑白名单的编写 以pikachu靶场中SSRF(crul)为例我们可以看到未做任何防御 我们查看源代码 黑名单的制作 思路: 什么内容不能访问 构造代码 $xyarray("file" > "",&q…...

想要对网站进行安全监测,安全SCDN效果怎么样?

随着互联网的迅速成长&#xff0c;各种网站出现的越来越多&#xff0c;个人网站、企业网站等&#xff0c;同时网站竞争也越来越强。随着用户对网站需求增多&#xff0c;对网站的安全也愈发受到人们的重视。那么我们日常网站运营中&#xff0c;有需要对网站进行安全监控&#xf…...

操作符extends的作用是什么?

在TypeScript中&#xff0c;extends关键字用于创建类之间的继承关系。它允许一个类&#xff08;子类&#xff09;继承另一个类&#xff08;父类&#xff09;的属性和方法&#xff0c;并可以在子类中添加新的属性和方法或者修改继承自父类的属性和方法。 extends的作用是实现类…...

跟着chatgpt一起学|1.spark入门之MLLib

chatgpt在这一章表现的不好&#xff0c;所以我主要用它来帮我翻译文章提炼信息 1.前言 首先找到spark官网里关于MLLib的链接 spark内一共有2种支持机器学习的包&#xff0c; 一种是spark.ml,基于DataFrame的&#xff0c;也是目前主流的 另一种则是spark.mllib,是基于RDD的…...

JAVA后端开发技术报告

JAVA后端开发技术报告 一、引言 随着互联网技术的不断发展&#xff0c;JAVA作为一门成熟的后端开发语言&#xff0c;应用范围广泛。本报告旨在介绍JAVA后端开发的相关技术&#xff0c;包括JAVA语言基础、Spring框架、数据库技术以及性能优化等方面&#xff0c;帮助开发者更好…...

销售心理学 如何了解客户的购买心理激发客户购买兴趣

销售心理学 如何了解客户的购买心理激发客户购买兴趣 在销售的世界里&#xff0c;掌握客户的购买心理&#xff0c;如同一把神奇的钥匙&#xff0c;能够解锁客户内心的需求和兴趣。如何巧妙地运用销售心理学&#xff0c;激发客户的购买欲望呢&#xff1f;以下是一些建议&#x…...

霍夫丁不等式(Hoeffding‘s inequality)

参考资料&#xff1a;Hoeffdings inequality | encyclopedia article by TheFreeDictionary 霍夫丁不等式&#xff08;Hoeffdings inequality&#xff09;描述了随机变量的和、与和的期望之差的上限&#xff1b;或者表述为&#xff1a;随机变量的均值、与均值的期望之差的上限。…...

【MATLAB源码-第90期】基于matlab的OQPSKsimulink仿真,对比初始信号和解调信号输出星座图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 正交偏移二进制相移键控&#xff08;OQPSK, Orthogonal Quadrature Phase Shift Keying&#xff09;是一种数字调制技术&#xff0c;主要用于高效无线数据传输。它是传统二进制相移键控&#xff08;BPSK&#xff09;的一个变…...

自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS

自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS 文章目录 自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS智能驾驶芯片CPU GPU NPU算力单位TOPS乘积累加运算MACTOPS计算公式GPU算力TFLOPSTFLOPS与TOPS的换算CPU算力DMIPS 智能驾驶芯片 根据地平线数据&#xff0c; L2级自动驾驶的算力…...

Sunshine:自托管游戏串流的革新方案

Sunshine&#xff1a;自托管游戏串流的革新方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在游戏世界中&#xff0c;硬件性能往往是制约体验的最大瓶颈。高端显卡、处理器和内…...

Qwen3.5-27B多场景落地:教育答题助手、工业质检报告生成、保险定损图分析

Qwen3.5-27B多场景落地&#xff1a;教育答题助手、工业质检报告生成、保险定损图分析 1. 模型概述 Qwen3.5-27B是Qwen官方发布的视觉多模态理解模型&#xff0c;具备强大的文本对话与图片理解能力。该模型已在4 x RTX 4090 D 24GB环境完成部署&#xff0c;提供以下核心功能&a…...

进程与线程的核心区别:一篇看懂,告别混淆

在编程学习中&#xff0c;尤其是接触 C 多线程、操作系统相关知识时&#xff0c;进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是两个绕不开的概念。很多新手会把二者混为一谈&#xff0c;甚至像之前我被问到的那样&#xff0c;疑惑“进程是不是线…...

游戏音频解密全流程:acbDecrypter高效处理指南

游戏音频解密全流程&#xff1a;acbDecrypter高效处理指南 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 在游戏开发与音频 mod 创作中&#xff0c;如何突破加密音频格式的限制&#xff0c;将 ACB、HCA、ADX 等专用格式转换…...

QWEN-AUDIO企业落地:呼叫中心坐席辅助语音+实时话术情感匹配系统

QWEN-AUDIO企业落地&#xff1a;呼叫中心坐席辅助语音实时话术情感匹配系统 1. 呼叫中心智能化升级需求 现代呼叫中心正面临前所未有的挑战。传统模式下&#xff0c;客服人员需要同时处理客户咨询、记录信息、查找资料&#xff0c;还要保持专业友好的服务态度。这种高强度的工…...

我让 Claude 和 Codex 同时审计 个模块,它们只在 个上达成共识儆

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...

终极解决方案:Windows 10 OneDrive 彻底卸载专业指南

终极解决方案&#xff1a;Windows 10 OneDrive 彻底卸载专业指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 在Windows 10系统中&#xf…...

告别模糊代码:用Source Code Pro字体拯救你的编程视力

告别模糊代码&#xff1a;用Source Code Pro字体拯救你的编程视力 【免费下载链接】source-code-pro Monospaced font family for user interface and coding environments 项目地址: https://gitcode.com/gh_mirrors/so/source-code-pro 你是否曾在深夜盯着屏幕&#x…...

排序算法指南:归并排序

前言&#xff1a;归并排序的核心思想是利用分治法&#xff08;Divide and Conquer&#xff09;策略&#xff0c;它将一个大的问题分解成小的、容易解决的子问题&#xff0c;然后将子问题的解合并起来&#xff0c;从而得到原问题的解。一、归并排序的核心思想分&#xff08;Divi…...

Zotero文献去重终极指南:如何快速清理重复条目提升研究效率

Zotero文献去重终极指南&#xff1a;如何快速清理重复条目提升研究效率 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 你是否曾经在Zotero文献…...