1. 两数之和

自己做 

分析

解法1:暴力解

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int num1 = 0;       //下标int num2 = 0;vector<int> s;      //保存结果for(vector<int>::iterator it1 = nums.begin(); it1 != nums.end()-1; it1++){num2 = num1+1;for(vector<int>::iterator it2 = it1+1; it2 != nums.end(); it2++){if(*it1+*it2 == target){s.push_back(num1);s.push_back(num2);return s;}num2++;}num1++;}return {0,0};  }
};

 错误想法

将大于target的部分舍弃缩小数组【没有考虑到有负数的情况】

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> new_nums = nums;for(vector<int>::iterator it = new_nums.begin(); it != new_nums.end(); ) {   //删除比target大的元素if(*it > target){it = new_nums.erase(it);                //删除,erase会返回下一个迭代器位置}elseit++;}vector<int> s1;              //保存结果【两个数】for(vector<int>::iterator it1 = new_nums.begin(); it1 != new_nums.end()-1; it1++){for(vector<int>::iterator it2 = it1+1; it2 != new_nums.end(); it2++){if(*it1+*it2 == target){s1.push_back(*it1);s1.push_back(*it2);}}}vector<int> s2;              //保存结果【寻找下标】int num = 0;for(vector<int>::iterator it = nums.begin(); it != nums.end(); it++,num++){if(*it == s1[0] || *it == s1[1])s2.push_back(num);}return s2;  }
};

看题解【想不到】

分析

自己写 

【注,最好直接用临时变量储存find得到的迭代器,不然反复调用find也很浪费时间】

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> exist_num;for(int i = 0; i < nums.size(); i++){       //映射到哈希表中<key,index>exist_num[nums[i]] = i;}for(int i = 0; i < nums.size(); i++){       //查找target-nums[i]是否存在map<int,int>::iterator index = exist_num.find(target-nums[i]);if(index != exist_num.end() && i != index->second)   //存在并且不是同一元素(下标不一致)return {index->second,i};}return {};}
};

2. 两数相加

自己做

分析

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *p1 = l1,*p2 = l2; //遍历结点ListNode *p3 = new ListNode((p1->val + p2->val) % 10);  //个位相加            int add =(p1->val + p2->val) / 10;                    //进位p1 = p1->next;p2 = p2->next;ListNode *pr = p3;                                  //尾插用的指针while(p1 != nullptr || p2 != nullptr){ListNode *p = nullptr;if(p1 != nullptr && p2 != nullptr){                //二者都不为空的情况p = new ListNode((p1->val + p2->val + add) % 10);  //创建新节点保存结果:保存余位  add = (p1->val + p2->val + add) / 10;                //保存进位p1 = p1->next;p2 = p2->next;}else if(p1 != nullptr){                            //p1不为空、p2为空 p = new ListNode((p1->val + add) % 10); //创建新节点保存结果:保存余位  add = (p1->val + add) / 10;                    //保存进位p1 = p1->next;}else if(p2 != nullptr){                                               //p2不为空、p1为空 p = new ListNode((p2->val + add) % 10); //创建新节点保存结果:保存余位  add = (p2->val + add) / 10;                     //保存进位p2 = p2->next;}pr->next = p;                                       //尾插pr = pr->next;}if(add != 0){                                //p1为空、p2为空外还有进位ListNode *p = new ListNode(add);pr->next = p;                                       //尾插pr = pr->next;}return p3;}
};

3. 无重复字符的最长子串

自己做

分析

遗漏点:string也是容器,也可以使用size、begin、end这些(之前的笔记没补上)

解法1:暴力解

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;                             //记录最大值string c;                                //子串for (int i = 0; i < s.size(); i++) {c = s[i];                           //子串起始位置从i开始bool exist_double = false;          //判断是否重复     for (int j = i + 1; j < s.size() && exist_double == false; j++) {      //子串扩展for (int z = 0; z < c.size(); z++) {if (s[i + c.size()] == c[z])       //子串的下一个字符s[i+c.size()]与子串存在重复exist_double = true;        //存在重复,调整起始位置}//不存在重复if (!exist_double)c += (s[i + c.size()]);           //拼接子串}//判断该轮取得的子串大小if (c.size() > max)max = c.size();}return max;                        //返回子串大小}
};

解法2:滑动窗口

这里我自己写的还不如暴力解

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;                             //记录最大值string c;                                //子串map<char, int> m;                         //哈希记录子串<word,index>,其中index为字符串s的下标int index = 0;                           //子串c的起始下标while (index + c.size() < s.size()) {c = s[index];                           //子串起始位置从index开始 m[s[index]]=index;                      //插入哈希表for (int j = index + 1; j < s.size(); j++) {      //子串扩展map<char, int>::iterator it = m.find(s[j]);              //哈希查找if (it != m.end()) {   //子串的下一个字符s[i+c.size()]与子串存在重复【在哈希表中找到元素】index = it->second+1;         //更改索引,跳出重复值m.clear();        //清空哈希表break;           //本次查找失败,直接进入下一轮【跳出for循环】}else {                //不存在重复c += s[j];           //拼接子串m[s[j]] = index;       //插入哈希表}}//判断该轮取得的子串大小if (c.size() > max)max = c.size();}return max;                        //返回子串大小}
};

效率低原因:

嵌套循环结构频繁的哈希表清空操作

看题解【敲不出】

知识点unordered_set:

仿写官方思路 

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_set<char> c;int rear = -1;int max = 0;for(int front = 0; front < s.size(); front++){if(front != 0){             //左指针移动c.erase(s[front - 1]);          //删除移出哈希表的数据}while(rear + 1 < s.size() && !c.count(s[rear+1])){//右指针移动c.insert(s[rear+1]);        //插入哈希表rear++;}if(rear - front + 1 > max)max = rear - front + 1;}return max;}
};

优化自己的实现

class Solution {
public:int lengthOfLongestSubstring(string s) {int max = 0;unordered_map<char, int> m;int front = 0, rear = 0;        //首位指针cout << s.size() << endl;//往哈希表中设置第一个元素if (s.size() != 0) {           //预防空字符串m[s[rear]] = rear;max++;                     //已经添加一个字符进去了,即最大值最小也是1while (rear < s.size() - 1) {unordered_map<char, int>::iterator it = m.find(s[rear + 1]); //查看下一个元素是否已经在哈希表中if (it != m.end()) {          //在哈希表中找到元素【有重复】int old = front;              //记录旧位置front = it->second + 1;      //偏移起始位置//移除窗口以外的值【front偏移了,前面的值都要删除】for (int i = old; i < front; i++) {m.erase(s[i]);}}//无重复,或重复问题被front偏移解决m[s[rear + 1]] = rear + 1;  //修改哈希表【重新修改值】rear++;if (rear - front + 1 > max)max = rear - front + 1;}}return max;}
};

【注:这过程中发现了之前都没有注意到的——size()返回的是无符号整数,而int是有符合整数,所以当我设置while循环的时候,往往出现size()返回的是0,结果设置的size()-1就变的极大,同理,设置rear从-1开始,结果rear转为无符号整数后就废了】

今天结束总结

之前做的博客笔记帮大忙了,刚学完的很多都有些忘了,还好之前做好了笔记可以来回翻

第十四章 STL(string容器、vector容器、deque容器)-CSDN博客

第十五章 STL(stack、queue、list、set、map容器使用)-CSDN博客

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

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

相关文章

AI一键“瘦身”,拯救巨卡无比的图

有没有碰到过那种巨卡无比的AI&#xff08;Illustrator&#xff09;文件&#xff1f;从素材网站下的&#xff0c;或者自己“图像描摹”出来的&#xff0c;上面密密麻麻全是锚点&#xff0c;动一下卡半天&#xff01;我是在海外工作了10年的职业设计师&#xff5e;这些年最大的心…

MySQL基础教程:SELECT语句详解

MySQL基础教程&#xff1a;SELECT语句详解一、SQL概述1.1 SQL背景知识1.2 SQL语言排行榜1.3 SQL分类二、SQL语言的规则与规范2.1 基本规则2.2 大小写规范2.3 注释2.4 命名规则2.5 数据导入三、基本的SELECT语句3.0 最简单的SELECT3.1 SELECT...FROM3.2 列的别名3.3 去除重复行3…

云原生环境下的安全控制框架设计

在这个容器满天飞、微服务遍地跑的时代&#xff0c;安全问题就像打地鼠游戏一样&#xff0c;刚按下一个又冒出三个。今天我们来聊聊如何在云原生环境中构建一套靠谱的安全控制框架。 &#x1f4d6; 文章目录 引言&#xff1a;云原生时代的安全新挑战云原生安全面临的核心挑战安…

Python关于numpy的基础知识

一.首先先安装numpy windowsr 输入cmd 然后像我这样输入进去&#xff0c;加一句后面的https&#xff1a;.....可以放其他他的镜像地址比如 清华大学镜像源&#xff1a;Simple Index阿里云镜像源&#xff1a;Simple Index中国科学技术大学镜像源&#xff1a;Verifying - USTC …

生成式人工智能实战 | 自回归模型详解与实现

生成式人工智能实战 | 自回归模型详解与实现 0. 前言 1. 文本生成模型分析 2. 数据处理 2.1 数据预处理 2.2 创建训练数据批次 3. 模型构建与训练 3.1 构建 LSTM 模型 3.2 训练 LSTM 模型 4. 生成文本 4.1 通过预测下一个 token 生成文本 4.2 控制文本生成的创意性 0. 前言 本…

路由器SDH POS接口

SDH POS 可看作“用 SDH 光纤专线给路由器当超级宽带网线”。 1️⃣ 拆名字 SDH 同步数字体系&#xff08;Synchronous Digital Hierarchy&#xff09;&#xff0c;运营商的骨干光传输标准&#xff0c;颗粒 STM-1/4/16/64…&#xff08;155 M/622 M/2.5 G/10 G&#xff09;。P…

响应式单位rpx及搭配使用UI产品工具

&#x1f3a8;✨ 欢迎来到RPX与即时设计的前端探索之旅 &#x1f680;&#x1f4bb; 亲爱的开发者朋友们&#xff1a; &#x1f44b; 大家好&#xff01;很高兴能在CSDN这个技术分享的平台上与各位相遇&#xff01;&#x1f31f; 作为一名长期奋战在前端开发一线的工程师&#…

MC0463四大名著-水浒签到

码蹄集OJ-四大名著-水浒签到 一、题目背景 本问题以《水浒传》为故事经纬&#xff0c;讲述史进对数列数字奥秘的探索。小码妹向其讲解特殊数列求和规则&#xff0c;我们需依据规则&#xff0c;对给定长度 n 的数列&#xff0c;按奇偶分组方式计算奇数组和与偶数组和的运算结果…

前缀和 HASH

前缀和 & HASH 个人模板 560. 和为 K 的子数组 class Solution {public int subarraySum(int[] nums, int k) {// 滑动窗口前缀和int n nums.length;int[] prevSum new int[n 1];for (int i 1; i < n 1; i) {prevSum[i] prevSum[i - 1] nums[i - 1];}int ans …

周末总结(2024/07/19)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利益冲突是直接质疑&am…

若依框架开启注册功能全流程指南

在若依&#xff08;RuoYi&#xff09;框架中&#xff0c;用户注册功能并非默认开启&#xff0c;需要通过后端配置、前端调整以及必要的角色分配设置来实现。本文将详细介绍开启注册功能的完整步骤&#xff0c;帮助开发者快速完成配置。一、后端配置&#xff1a;开启注册功能开关…

STM32单片机_3

第十章IIC通信协议规定, 起始之后主机必须先发送一个字节: 从机地址读写位, 进行寻址然后接收一下应答位, 然后再发送一个字节, 写入从机寄存器地址 之后就可以进行数据的收发了注意: 在 主机的接收应答的时候, 立刻释放SDA 然后这时候从机会立刻做出反应, 即拉低SDA, 也就是置…

SpringAI_Chat模型_DeepSeek模型--基础对话

一、前言 Spring AI 提供跨 AI 供应商&#xff08;如 OpenAI、Hugging Face 等&#xff09;的一致性 API, 通过分装的ChatModel或ChatClient即可轻松调动LLM进行流式或非流式对话。 本专栏主要围绕着通过OpenAI方式调用各种大语言模型展开学习&#xff08;因为95%以上模型都…

数据结构:字符串(Strings)

目录 第一性问题&#xff1a;计算机如何表示文字&#xff1f; ASCII&#xff1a;最早的字符编码标准&#xff08;美国人写的&#xff09; Unicode&#xff1a;解决全球语言的编码方案 字符&#xff08;Character&#xff09; ​编辑 为什么字符常量必须加上单引号 &#…

【vue-5】Vue 3 中的 v-model:双向数据绑定的全面指南

在 Vue 开发中&#xff0c;v-model 是实现表单输入和应用状态之间双向绑定的关键指令。Vue 3 对 v-model 进行了重大改进&#xff0c;使其更加灵活和强大。本文将深入探讨 Vue 3 中 v-model 的工作原理、新特性以及最佳实践。 1. v-model 基础 1.1 什么是 v-model v-model 是 V…

结合自身,制定一套明确的 Web3 学习路线和技术栈建议

目录 ✅ 一、结合自身&#xff0c;明确方向和目的 ✅ 二、技术路线和建议 &#x1f9ed; 技术路线图&#xff08;按阶段划分&#xff09; 第一阶段&#xff1a;巩固 Web3 基础&#xff08;1-2 周&#xff09; 第二阶段&#xff1a;NFT 平台开发实战&#xff08;4-6 周&…

SPARKLE:深度剖析强化学习如何提升语言模型推理能力

摘要&#xff1a;强化学习&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;已经成为赋予语言模型高级推理能力的主导范式。尽管基于 RL 的训练方法&#xff08;例如 GRPO&#xff09;已经展示了显著的经验性收益&#xff0c;但对其优势的细致理解仍然不足。为了填…

【Linux服务器】-MySQL数据库参数调优

一、基础配置 [mysqld] # 声明以下配置属于MySQL服务器&#xff08;mysqld&#xff09;[mysqld]&#xff1a;配置文件的模块标识&#xff0c;表示这是 MySQL 服务器的配置段。 二、路径与基础设置 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock pid-file/var/run/mys…

sqli-labs靶场通关笔记:第32-33关 宽字节注入

第32关 宽字节注入查看一下本关的源代码&#xff1a;function check_addslashes($string) // 定义一个用于过滤特殊字符的函数&#xff0c;目的是转义可能用于注入的特殊符号 {$string preg_replace(/. preg_quote(\\) ./, "\\\\\\", $string); // 转义…

基于Eureka和restTemple的负载均衡

在微服务架构中&#xff0c;基于 Eureka&#xff08;服务注册中心&#xff09;和 RestTemplate&#xff08;HTTP 客户端&#xff09;实现负载均衡是常见的方案&#xff0c;核心是通过 Eureka 获取服务实例列表&#xff0c;再结合负载均衡策略选择具体服务实例进行调用。以下是详…