【C++LeetCode】【热题100】三数之和【中等】-不同效率的题解【6】

题目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
暴力方法:
在这里插入图片描述

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;std::unordered_set<std::string> uniqueValues;//保证结果唯一for(int i=0;i<nums.size();i++){//三个值暴力求解for(int j=0;j<nums.size();j++){for(int k=0;k<nums.size();k++){if(i!=j && i!=k && j!=k && nums[i]+nums[j]+nums[k]==0){vector<int> temp;temp.push_back(nums[i]);temp.push_back(nums[j]);temp.push_back(nums[k]);sort(temp.begin(),temp.end());//排序ostringstream oss;oss<<temp[0]<<temp[1]<<temp[2];std::string temposs=oss.str();//cout<<oss.str()<<endl;// for(const auto & elem:uniqueValues){//     cout<<"---"<<elem<<endl;// }if(uniqueValues.find(temposs)!=uniqueValues.end()){//结果去重//cout<<temposs<<endl;}else{uniqueValues.insert(temposs);res.push_back(temp);}}}}}return res;}
};

优化方法1:

在这里插入图片描述

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;std::unordered_set<std::string> uniqueValues;//保证结果唯一std::unordered_map<std::string,vector<int>>uniqueKVs;for(int i=0;i<nums.size();i++){//优化下,选择二个for(int j=i+1;j<nums.size();j++){vector<int> temp;temp.push_back(nums[i]);temp.push_back(nums[j]);temp.push_back(0-(nums[i]+nums[j]));sort(temp.begin(),temp.end());//排序ostringstream oss;oss<<i<<","<<j;uniqueKVs[oss.str()]=temp;}}for(const auto & elem :uniqueKVs){//查找符合条件的std::string k=elem.first;size_t pos=k.find(",");int i=std::stoi(k.substr(0,pos));int j=std::stoi(k.substr(pos+1,k.size()-pos-1));        vector<int> temp=elem.second;for(int k=0;k<nums.size();k++){if(i!=j && i!=k && j!=k && nums[i]+nums[j]+nums[k]==0){ostringstream oss;oss<<temp[0]<<temp[1]<<temp[2];std::string temposs=oss.str();cout<<oss.str()<<endl;if(uniqueValues.find(temposs)!=uniqueValues.end()){//结果去重//cout<<temposs<<endl;}else{uniqueValues.insert(temposs);res.push_back(temp);}}}}return res;}
};

优化方法2:

在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(),nums.end());//排序 方便 去重 和查找for(int i=0;i<nums.size();i++){//优化下,选择二个if(i==0 || nums[i] != nums[i-1]){//去除 越界 和重复的值int k=nums.size()-1;//双指针 左右 逼近  使得并行查找for(int j=i+1;j<nums.size();j++){if(j==i+1 || nums[j]!=nums[j-1]){//去除 越界 和重复的值while(j<k && nums[i]+nums[j]+nums[k]>0){k--;//并行查找合适的 k对应的值}if(j==k){break;// 左边和右边 通过双指针都 查找了,不能再存在符合条件的了}if(nums[i]+nums[j]+nums[k]==0){//获得符合条件的res.push_back({nums[i],nums[j],nums[k]});}}}}}return res;}
};

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

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

相关文章

工商业储能柜用的Acrel-2000ES储能能量管理系统-安科瑞 蒋静

概述 Acrel-2000ES储能能量管理系统&#xff0c;专门针对工商业储能柜、储能集装箱研发的一款储能EMS&#xff0c;具有完善的储能监控与管理功能,涵盖了储能系统设备(PCS、BMS、电表、消防、空调等)的详细信息&#xff0c;实现了数据采集、数据处理、数据存储、数据查询与分析…

PHP米表域名出售管理源码带后台

源码介绍 html5米表源码PHP域名销售程序安装方法&#xff1a; 本站已测试,各项功能正常,功能易用,不复杂,非常适合个人米表使用 1、所有文件传至网站目录 2、浏览器执行http://你的访问网址/install 3、输入mysql帐号及密码信息&#xff0c;提交安装 源码截图 源码下载 …

MySQL程序使用的选项文件

MySQL程序使用的选项文件如下&#xff1a; 显示帮助消息并退出。 在具有多个网络接口的计算机上&#xff0c;使用此选项可以选择用于连接MySQL服务器的接口。 安装字符集的目录。 如果可能&#xff0c;压缩客户端和服务器之间发送的所有信息。 从MySQL 8.0.18开始&#xff0c;…

GPOPS-II教程(3): 航天器最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function完整代码代码仿真结果 最后 问题描述 例子出自论文 Direct solution of nonlinear optimal control problems using quasilinearization and Chebyshev polynomials&#xff08;DOI&#xff1a;1…

新手选择代理IP时这几点误区一定要避开!

在选择代理IP时&#xff0c;许多用户可能会因为对代理IP的认识不足或受到一些误导&#xff0c;而陷入一些常见的误区。这些误区不仅可能导致用户无法达到预期的效果&#xff0c;还可能带来一些不必要的风险。下面&#xff0c;IPIDEA代理IP就与大家一同分析在选择代理IP时需要避…

国企:2024年6月中国铁路相关招聘信息,6.27截止

中国铁路济南局集团有限公司2024年度 招聘普通高校本科及以上学历毕业生公告(三) 中国铁路济南局集团有限公司根据企业发展需要,拟招聘普通高等院校本科及以上学历毕业生,现将有关事项公告如下: 一、招聘计划 本次招聘岗位均为生产一线操作技能岗位,具体岗位、专业要求…

【教资优秀作文】

目录 不沉湎于过去&#xff0c; 向未来进发 转变思维方式&#xff0c;风景这边独好 一英尺的距离 面对逆境&#xff0c;智者生存 机遇与准备 1. 巴西足球名将贝利在足坛初露锋芒时 &#xff0c;一个记者问他&#xff1a;“你哪一个球踢得最好&#xff1f; ” 他回答说&am…

说说ThreadLocal的实现原理

ThreadLocal是什么&#xff1f; ThreadLocal是Java中的一个类&#xff0c;用于创建线程局部变量和解决线程安全。每个线程都有自己独立的变量副本&#xff0c;彼此之间互不影响。它的主要作用是在多线程环境下&#xff0c;确保每个线程都有自己的变量实例&#xff0c;避免了变…

Retrofit类型安全的HTTP客户端库(json)

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库&#xff0c;用于Android和Java平台&#xff0c;它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口&#xff0c;让你可以用更简洁的代码形式调用RESTful API&#xff0c;Android网络编程重点…

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多&#xff0c;该如何精简 1.1. 对象参数&#xff08;对象字面量&#xff09;&#xff1a;1.2. 默认参数和解构赋值&#xff1a;1.3. 使用类或构造函数&#xff1a;1.4. 利用闭包或者高阶函数&#xff1a;1.5. 利用ES6的扩展运算符&#xff1…

【LeetCode】每日一题:反转链表

题解思路 循环的方法需要注意prev应该是None开始&#xff0c;然后到结束的时候prev是tail&#xff0c;递归的思路很难绕过弯来&#xff0c;主要在于很难想清楚为什么可以返回尾节点&#xff0c;需要多做递归题&#xff0c;以及递归过程中&#xff0c;可以不使用尾节点来找当前…

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数&#xff08;二&#xff09; date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要&#xff1a;本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数&#xff0c;包括app:redirected&#xff08;SSR环境下重定向前触发…

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内&#xff0c;提供了编译脚本 build.sh&#xff0c;运行该脚本对整个源码进行编译&#xff0c;需要在终端切换到解压 出来的源码路径&#xff0c;找到 build.sh 文件…

6.26作业

1.整理思维导图 2.统计家目录下.c文件的个数 ls ~/*.c | wc -l 3.终端输入一个.sh文件&#xff0c;判断文件是否由可执行权限&#xff0c;如果有可执行权限运行脚本&#xff0c;没有可执行权限添加可执行权限后&#xff0c;再运行脚本 #!/bin/bash read -p "请输入一个.…

spring模块(二)SpringBean(2)InitializingBean

一、介绍 InitializingBean是Spring框架提供的一个接口&#xff0c;用于在Bean初始化完成后执行特定的初始化逻辑。 二、使用 1、使用方法 1.1、实现InitializingBean接口 可以让Bean实现该接口&#xff0c;并重写其afterPropertiesSet()方法 1.2、注册 也即让bean初始化…

从官方源码精简出第1个FreeRTOS程序

一、下载官方源码 1、打开百度搜索freerots&#xff0c;找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…

vue2面试题——API

1. $set this.$set(目标对象target&#xff0c;改的位置&#xff0c;最终数据) /* 数据更新了而视图没有更新的情况 */ <template><div>{{ arr }}<button clickbtn>按钮</button></div> </template> <script> export default {name:…

海康威视摄像头修复

一、适用场景 1、室外安装的摄像头&#xff0c;长时间日晒雨淋后&#xff0c;可能因风向导致雨水进入水晶头&#xff0c;进而摄像头无法识别&#xff1b; 2、在经常施工的场地&#xff0c;可能由于车辆的进出&#xff0c;或施工设备的运行导致摄像头的网线水晶头断裂而无法使用…

浔川社团正式启用 代码付费制度——浔川总社部

浔川社团正式启用 代码付费制度。 规则&#xff1a; 浔川社团源代码收费标准表&#xff08;1&#xff09; 1-5行代码0.2元/行1-10行代码0.3元/行1-20行代码0.5元/行 浔川社团源代码收费标准表&#xff08;2&#xff09; 1-30行代码0.6元/行1-40行代码0.8元/行1-50行代码0.09元…

【PythonWeb开发】Flask中间件钩子函数实现封IP

在 Flask 框架中&#xff0c; 提供了几种类型的钩子&#xff08;类似于Django的中间件&#xff09;&#xff0c;它们是在请求的不同阶段自动调用的函数。这些钩子让你能够对请求和响应的处理流程进行扩展&#xff0c;而无需修改核心代码。 Flask钩子的四种类型 before_first_r…