题目练习之set的奇妙使用


♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥

♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥

♥♥♥我们一起努力成为更好的自己~♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥

✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨

上一篇博客我们已经对set容器进行了详细的介绍,相信大家对set有了更加深刻的认识,光说不练假把式,这一篇博客我们就来使用set容器在我们的算法题大放异彩~准备好了吗~我们发车去探索C++的奥秘啦~🚗🚗🚗🚗🚗🚗

两个数组的交集

两个数组的交集

        按照我们以前的思路我们可以新建一个数组,然后遍历原来的两个数组,找到重复元素保存到新数组里面~

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) 
{
int i=0;
int j=0;
int k=0;
int count=0;
int*arr=(int*)malloc(sizeof(int)*1000);
for (i = 0; i < nums1Size; i++)
{int flag = 1;for (j = 0; j < nums2Size; j++){if (nums1[i] == nums2[j]){for (k = 0; k <= count; k++){if (arr[k] == nums1[i]){flag = 0;break;}}if (flag != 0){arr[count] = nums1[i];count++;}break;}}
}*returnSize=count;return arr;
}

        现在有了set容器,我们就可以采用新思路:

        1、分别使用两个set容器保存两个数组元素,这就完成了去重+排序的功能,我们后面也就不需要处理重复的问题~

        2、使用迭代器遍历容器,这里有两种情况

                如果相等就保存到返回的数组中,迭代器都++

                如果不相等就让元素小的那个迭代器进行++

class Solution 
{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {//使用set保存数据set<int> s1(nums1.begin(),nums1.end());set<int> s2(nums2.begin(),nums2.end());vector<int> ret;//使用迭代器遍历auto it1=s1.begin();auto it2=s2.begin();while(it1 != s1.end() && it2 != s2.end())//一个走到末尾就结束{//如果相等保存数据,然后都++if(*it1==*it2){ret.push_back(*it1);it1++;it2++;}//不相等,小的++else if(*it1 < *it2){it1++;}else if(*it1 > *it2){it2++;}}return ret;}
};

成功通过,并且时间复杂度也十分优秀~

环形链表Ⅱ

环形链表Ⅱ

这个题目我们也使用C语言做过,可以看看这篇博客的代码题目练习之链表那些事儿(再续)

可以看出当时思路还是比较复杂的,还需要进行证明才得出来思路,现在有了set容器,我们就可以降维打击了~

新思路

        使用set容器保存结点指针,使用set的count进行计数,如果它已经有了,说明结点指针重复,那么这就是一个环形链表,当前结点指针就是第一个入环的,直接返回;如果没有插入set,继续遍历~

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution 
{
public:ListNode *detectCycle(ListNode *head) {set<ListNode*> s;ListNode* cur = head;while(cur){//如果有就成环了,直接返回if(s.count(cur)) return cur;//如果没有,插入容器继续遍历s.insert(cur);cur=cur->next;}//走到结束return nullptr;}
};

成功通过,我们可以看到这个set的妙处就更加明显啦~

当然,我们除了使用count判断,还可以使用insert的返回值进行判断,前面我们说set容器insert接口返回值类型是pair类型,第二个是bool类型的,如果返回的是false说明插入失败,那么这就是第一个入环结点了~

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution 
{
public:ListNode *detectCycle(ListNode *head) {set<ListNode*> s;ListNode* cur = head;while(cur){//根据insert返回值判断if(s.insert(cur).second==false) return cur;cur=cur->next;}//走到结束return nullptr;}
};

这里的代码也就更加简单,不得不说set容器的使用大大提高了我们的效率,我们要学会在合适的时候进行使用~这样就可以事半功倍了~


♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

✨✨✨✨✨✨个人主页✨✨✨✨✨✨


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java虚拟机——JVM(Java Virtual Machine)解析一

1.JVM是什么&#xff1f; 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心组件之一&#xff0c;它使得 Java 程序能够在任何支持 JVM 的设备或操作系统上运行&#xff0c;而无需修改源代码 JDK是什么&#xff0c;JDK和JVM是什么关系&#xff1f;1.Java IDE(Integrated …

初识 Three.js:开启你的 Web 3D 世界 ✨

3D 技术已经不再是游戏引擎的专属&#xff0c;随着浏览器技术的发展&#xff0c;我们完全可以在网页上实现令人惊艳的 3D 效果。而 Three.js&#xff0c;作为 WebGL 的封装库&#xff0c;让 Web 3D 的大门向更多开发者敞开了。 这是我开启这个 Three.js 专栏的第一篇文章&…

OpenGL ES -> SurfaceView + EGL实现立方体纹理贴图+透视效果

XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MySurfaceView xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

pikachu靶场搭建教程,csfr实操

靶场安装 靶场下载地址 百度网盘下载地址和密码 百度网盘 请输入提取码 0278 github靶场下载地址 https://gitcode.com/Resource-Bundle-Collection/c7cc1 安装前提 这两个文件夹的配置文件都要进行更改修改数据库密码 D:\phpstudy_pro\WWW\pikachu\inc D:\phpstudy_pro…

浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线!端云协同:让AI更懂你的小心思! - 张圣宇 研究员

今晚8点10分左右&#xff0c;端云协同&#xff1a;让AI更懂你的小心思&#xff01;浙大学者张圣宇研究员将揭秘人机交互新玩法。浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线&#xff01; 讲座 主题&#xff1a; 大小模型端云协同赋能人机交互 主讲人&#xff1a…

Vue3实战三、Axios封装结合mock数据、Vite跨域及环境变量配置

目录 Axios封装、调用mock接口、Vite跨域及环境变量配置封装Axios对象调用mock接口数据第一步、安装axios&#xff0c;处理一部请求第二步、创建request.ts文件第三步、本地模拟mock数据接口第四步、测试axiosmock接口是否可以调用第五步、自行扩展 axios 返回的数据类型 axios…

Linux如何删除文件名包含无效编码字符文件

在Linux中&#xff0c;文件名包含无效编码字符或特殊不可见字符时&#xff0c;可能导致此文件无法通过常规方式选中或删除&#xff0c;可以通过下面方法处理 1、确认文件名问题 检查终端编码环境 echo $LANG # 默认应为 UTF-8&#xff08;如 en_US.UTF-8&#xff09; 查看…

Completablefuture的底层原理是什么

参考面试回答&#xff1a; 个人理解 CompletableFuture 是 Java 8 引入的一个类、它可以让我们在多线程环境中更加容易地处理异步任务。CompletableFuture 的底层原理是基于一个名为 FutureTask 的机制、结合了 监听器模式 和 等待-通知机制 来处理异步计算。 1.首先就是Com…

C/C++ 调用约定:深入理解栈与平栈

前言 在编程中&#xff0c;理解函数调用约定和栈的机制对于编写高效代码、调试程序以及进行逆向工程至关重要。本文将深入探讨 C 和 C 的调用约定&#xff0c;以及栈与平栈的相关知识。 C 调用约定 在 C 语言中&#xff0c;默认的调用约定是 cdecl。cdecl 调用约定的特点如下&…

xv6-labs-2024 lab1

lab-1 注&#xff1a;实验环境在我的汇编随手记的末尾部分有搭建教程。 0.前置 第零章 xv6为我们提供了多种系统调用&#xff0c;其中&#xff0c;exec将从某个文件里读取内存镜像(这确实是一个好的说法)&#xff0c;并且将其替换到调用它的内存空间&#xff0c;也就是这个…

属性修改器 (AttributeModifier)

主页面设置组件 import { MyButtonModifier } from ../datastore/MyButtonModifier;Entry ComponentV2 struct MainPage {// 支持用状态装饰器修饰&#xff0c;行为和普通的对象一致Local modifier: MyButtonModifier new MyButtonModifier();build() {Column() {Button(&quo…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的监控:使用 Actuator 实现健康检查

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、引子&…

类和对象(下篇)(详解)

【本节目标】 1. 再谈构造函数 2. Static成员 3. 友元 4. 内部类 5. 再次理解封装 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 #include <iostream> using name…

高精度算法

高精度加法 输入两个数&#xff0c;输出他们的和&#xff08;高精度&#xff09; 输入样例 111111111111111111111111111111 222222222222222222222222222222 输出样例 333333333333333333333333333333 #include <bits/stdc.h> using namespace std;string a,b; in…

Linux开发中注意哪些操作系统安全

在 Linux 开发中&#xff0c;确保操作系统的安全至关重要。以下是一些需要注意的方面&#xff1a; 用户管理与权限控制 合理设置用户权限&#xff1a;为不同的用户和用户组分配适当的权限&#xff0c;遵循最小权限原则。避免给普通用户过多的权限&#xff0c;以免他们误操作或…

x64dbg调试python解释器

可以先写个input()这会让dbg中断在ntdll模块中&#xff0c;查看调用堆栈在系统调用结束后的打断点 然后直接断到PyObject_Vectorcall函数

✅ Ultralytics YOLO验证(Val)时自动输出COCO指标(AP):2025最新配置与代码详解 (小白友好 + B站视频)

✅ YOLO获取COCO指标(3)&#xff1a;验证(Val) 启用 COCO API 评估&#xff08;自动输出AP指标&#xff09;| 发论文必看&#xff01; | Ultralytics | 小白友好 文章目录 一、问题定位二、原理分析三、解决方案与实践案例步骤 1: 触发 COCO JSON 保存步骤 2: 确保 self.is_coc…

【嵌入式学习3】基于python的tcp客户端、服务器

目录 1、tcp客户端 2、tcp服务器 3、服务器多次连接客户端、多次接收信息 1、tcp客户端 """ tcp:客户端 1. 导入socket模块 2. 创建socket套接字 3. 建立tcp连接(和服务端建立连接) 4. 开始发送数据(到服务端) 5. 关闭套接字 """ import soc…

Linux: network: 两台直连的主机业务不通

前提环境,有一个产品的设定是两个主机之间必须是拿网线直连。但是设备管理者可能误将设置配错,不是直连。 最近遇到一个问题,说一个主机发的包,没有到对端,一开始怀疑设定的bond设备的问题,检查了bond的设置状态,发现没有问题,就感觉非常的奇怪。后来就开始怀疑两个主机…

COMSOL固体力学接触

目录 一、接触非线性及接触面积计算 一、接触非线性及接触面积计算 COMSOL接触非线性及接触面积计算_哔哩哔哩_bilibili 形成联合体&#xff0c;在定义处右键选择“建立接触对” 位移dz使用参数化扫描。 接触选择定义中设置的接触对&#xff0c;选择罚函数&#xff0c;摩擦设置…