【力扣刷题1-10】

  • 力扣刷题1-10

力扣刷题1-10

  • 1、两数之和
    • 1.1 题目
    • 1.2 分析
    • 1.3 代码实现
  • 2、两数相加
    • 2.1 题目
    • 2.2 分析
    • 2.3 代码实现
  • 3、无重复字符的最长子串
    • 3.1 题目
    • 3.2 分析
      • 3.3 代码实现
  • 4、寻找两个有序数组的中位数
    • 4.1 题目
    • 4.2 分析
      • 4.3 代码实现
  • 5、最长回文子串
    • 5.1 题目
    • 5.2 分析
    • 5.3 代码实现
  • 6、Z 字形变换
    • 6.1 题目
    • 6.2 分析
      • 6.3 代码实现
  • 7、整数反转
    • 7.1 题目
    • 7.2 分析
      • 7.3 代码实现
  • 8、字符串转换整数 (atoi)
    • 8.1 题目
    • 8.2 分析
      • 8.3 代码实现
  • 9、回文数
    • 9.1 题目
    • 9.2 分析
      • 9.3 代码实现
  • 10、正则表达式匹配
    • 10.1 题目
    • 10.2 分析
      • 10.3 代码实现

1、两数之和

1.1 题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案

1.2 分析

C++中map,有三种类型:

std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。

同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。更多哈希表的理论知识请看关于哈希表,你该了解这些!

这道题目中并不需要key有序,选择std::unordered_map 效率更高!使用其他语言的录友注意了解一下自己所用语言的map结构的内容实现原理。

接下来需要明确两点:

map用来做什么
map中key和value分别表示什么
map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下表,这样才能找到与当前元素相匹配的(也就是相加等于target)

接下来是map中key和value分别表示什么。

这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。

那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下表}。

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素比配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
在这里插入图片描述

1.3 代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map<int,int> hashmap;for(int i=0;i<nums.size();i++){auto iter=hashmap.find(target-nums[i]);if(iter==hashmap.end()){//没有找到,插入hashmap.insert({nums[i],i});}else{return {iter->second,i};}}return {};}
};

2、两数相加

2.1 题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2.2 分析

2.3 代码实现

/*** 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 *head=nullptr,*tail=nullptr;int carry=0;while(l1 || l2){//链表未扫描结束int n1=l1 ? l1->val:0;int n2=l2 ? l2->val:0;int sum=(n1+n2+carry)%10;carry=(n1+n2+carry)/10;if(!head)//第一个值插入head=tail= new ListNode (sum);else{//剩下的值插入tail->next=new ListNode(sum);tail=tail->next;}if(l1)l1=l1->next;if(l2)l2=l2->next;}if(carry>0)//最后有进位要附加一个节点tail->next= new ListNode(carry);return head;}
};

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

3.1 题目

3.2 分析


3.3 代码实现

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_set<char> occ;int rk=-1;//右指针初始为字符串左边界的左侧int ans=0;for(int i=0;i<s.size();i++){if(i){occ.erase(s[i-1]);//左指针移动,则删除前面一个字符}while(rk+1<s.size() && occ.find(s[rk+1])==occ.end()){//还没遍历完且当前指向字符不在子串中occ.insert(s[rk+1]);++rk;}ans=max(ans,rk+1-i);}return ans;}
};

4、寻找两个有序数组的中位数

4.1 题目

4.2 分析

由于两个数组的长度已知,因此中位数对应的两个数组的下标之和也是已知的。维护两个指针,初始时分别指向两个数组的下标 000 的位置,每次将指向较小值的指针后移一位(如果一个指针已经到达数组末尾,则只需要移动另一个数组的指针),直到到达中位数的位置。

4.3 代码实现

class Solution {
public:int findKthElememt(const vector<int>& nums1, const vector<int>& nums2,int k){int m=nums1.size(),n=nums2.size();int index1=0,index2=0;while (true){if(index1==m)//nums1的数全部排除return nums2[index2+k-1];if(index2==n)//nums2的数全部排除return nums1[index1+k-1];if(k==1)return min(nums1[index1],nums2[index2]);int newindex1=min(index1+k/2-1,m-1);int newindex2=min(index2+k/2-1,n-1);int pri1=nums1[newindex1];int pri2=nums2[newindex2];if(pri1>=pri2){k-=newindex2-index2+1;//排除比较之后更小值所在数组的[index,newindex]范围的数index2=newindex2+1;}else{k-=newindex1-index1+1;index1=newindex1+1;}}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int m=nums1.size(),n=nums2.size();if((m+n)%2)return findKthElememt(nums1, nums2,(m+n)/2+1);//总长为奇数elsereturn (findKthElememt(nums1, nums2,(m+n)/2)+findKthElememt(nums1, nums2,(m+n)/2+1))/2.0;}
};

5、最长回文子串

5.1 题目

5.2 分析

5.3 代码实现

class Solution {
public:int expandAroundCenter(string s,int left,int right){while(left>=0 && right<s.size() && s[left]==s[right]){left--;right++;//向外扩展}return right-left-1;}string longestPalindrome(string s) {if(s.size()<1)return "";if(s.size()==1)return s;int n=s.size();int maxlen=0;int left,right;for(int i=0;i<n;i++){int len1=expandAroundCenter(s,i,i);int len2=expandAroundCenter(s,i,i+1);int len=max(len1,len2);if(len>maxlen){maxlen=len;left=i-(len-1)/2;right=i+len/2;}}return s.substr(left,maxlen);}
};


6、Z 字形变换

6.1 题目

6.2 分析

6.3 代码实现

7、整数反转

7.1 题目

7.2 分析

7.3 代码实现

8、字符串转换整数 (atoi)

8.1 题目

8.2 分析

8.3 代码实现

9、回文数

9.1 题目

9.2 分析

9.3 代码实现

10、正则表达式匹配

10.1 题目

10.2 分析

10.3 代码实现

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

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

相关文章

力扣刷题汇总

力扣刷题汇总 C基础知识学习&#xff1a;一、数组例题 二、链表参考理论C/C的定义链表节点方式知识点例题 三、哈希表参考理论例题 四、字符串例题KMP算法 五、双指针法例题 六、栈与队列&#xff08;栈和队列都是容器适配器&#xff09;参考理论数据结构学习&#xff08;queue…

力扣刷题记录-4

目录 No.226No.112No.700No.701No.98No.653No.235 No.226 复盘&#xff1a; 1、这道题的核心思路是递归 2、首先将叶子节点进行翻转&#xff0c;然后回到它的父节点&#xff0c;如果其左右结点都已翻转&#xff0c;则直接交换两个子树 这样一直递归至根节点&#xff0c;则算法完…

BAT程序员总结的力扣刷题指南,已经在Github了!!刷题顺序,优质题解一网打尽!

相信很多小伙伴刷题的时候面对力扣上近两千道题目&#xff0c;感觉无从下手&#xff01; 我花费半年时间整理了Github学习项目「力扣刷题攻略」&#xff1a; https://github.com/youngyangyang04/leetcode-master 先上上图吧&#xff01; 项目中整体顺序为&#xff1a;前序&a…

【力扣刷题 | 第六天】

目录 前言&#xff1a; 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 今天我们进入字符串章节的刷题旅程&#xff0c;希望各位小伙伴可以和我一起坚持下去&#xff0c;一起征服力扣&#xff01; 前言…

力扣题库刷题笔记682-棒球比赛

1、题目如下&#xff1a; 2、个人Python代码实现如下&#xff1a; 代码如下&#xff1a; class Solution: def calPoints(self, operations: List[str]) -> int: i 0 #用于遍历元素的下标 while i < len(operations): …

力扣刷题【第一期】

文章目录 1.爬楼梯2.求两数的和&#xff08;283&#xff09;3.移动零&#xff08;283&#xff09;3.1 题目描述3.2 算法描述3.3具体实现 4.合并有序连表&#xff08;21&#xff09;4.1 题目描述4.2 算法思想4.3 代码实现 5.删除连表中重复的值&#xff08;83&#xff09;5.1 题…

力扣刷题Day4

24. 两两交换链表中的节点 题目&#xff1a;力扣 难点在与如何模拟节点的交换&#xff0c;在编码实现的时候容易出现杂乱而导致循环节点的出现。 在自己实现的时候&#xff0c;出现的错误&#xff1a; 把head和head.next作为迭代的基准&#xff0c;但是存在的问题是&#x…

力扣刷题流程--记录用

目前已完成第一小节的做题任务&#xff0c;前路漫漫啊。 第一部分 数据结构基础&#xff08;155 题&#xff09; 数组和字符串&#xff08;22 题&#xff09; 数组类算法&#xff08;12 题&#xff09; 链表&#xff08;15 题&#xff09; 队列 & 栈&#xff08;2…

【力扣刷题 | 第五天】

目录 前言&#xff1a; 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 结束&#xff1a; 前言&#xff1a; 今天两道题类型相似&#xff0c;解法思路一致&#xff0c;都利用了双指针技术。 15. 三数之和 - 力…

力扣-刷题记录

189. 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 力扣https://leetcode.cn/problems/rotate-array/description/ void rotate(int* nums, int numsSize, int k){if(k > numsSize){k % numsSize;}if(k0){f…

出海周报|Temu在美状告shein、ChatGPT安卓版上线、小红书回应闪退

工程机械产业“出海”成绩喜人&#xff0c;山东相关企业全国最多Temu在美状告shein&#xff0c;跨境电商战事升级TikTok将在美国推出电子商务计划&#xff0c;售卖中国商品高德即将上线国际图服务&#xff0c;初期即可覆盖全球超200个国家和地区ChatGPT安卓版正式上线&#xff…

方法试用:基于强化学习提高EEG分类准确率的特征选择方法(完整代码)

2023/4/19 -4/21 脑机接口学习内容一览&#xff1a; 这一篇文章主要建立在前文脑机接口随机森林判断睡眠类型与EEG前沿方法探索的基础上&#xff0c;尝试运用强化学习的方法来提高识别睡眠阶段的准确率&#xff0c;对前段时间强化学习的学习成果做一个总结。 一、强化学习类详解…

最简单容易的四格漫画制作软件 Comic Strip Factory for Mac

Comic Strip Factory for Mac是一款漫画制作软件&#xff0c;小编亲测推荐。 Comic Strip Factory 发布了最新版本1.0.137&#xff0c;专为喜欢漫画的用户准备的。无需你会绘画就可以在Mac上制作精美的漫画&#xff0c;常见的卡通四格漫画都可以用它制作。 Comic Strip Fact…

怎么用手机制作一个四格漫画(flutter)

一&#xff0c;背景 四格漫画&#xff0c;是以四个画面分格来完成一个小故事或一个创意点子的表现形式 &#xff0c;分为开头&#xff0c;发展&#xff0c;高潮&#xff0c;结尾 。那怎么用手机制作一个四格漫画呢&#xff1f;就像下图这样。 二&#xff0c;思考过程 漫画么&…

GPT-5: 超越人类语言的模型,你还不了解一下?

目录 一、GPT-5时代引领者 二、技术特性 1&#xff0c;音频和视频处理 — 更强大的多模态处理能力 2&#xff0c;GPT-5颠覆影视制作&#xff1a;重写媒体消费时代 3&#xff0c;为机器人提供智慧大脑 4&#xff0c;更强的垂直行业应用 三、回顾一下GPT5被紧急叫停&…

【论文阅读】Computational Personality: A Survey 计算性格学综述

文章目录 摘要1. 引言2. 计算性格学研究框架2.1 性格学理论基础2.1.1 性格分类模型2.1.2 性格计算&#xff08;测量&#xff09;方法 2.2 计算性格学研究框架 3. 计算性格学研究3.1 性格预测3.1.1 基于大五模型的性格预测3.1.2 基于MBTI性格量表的性格预测3.1.3 小结 3.2 抑郁检…

安装oracle时,口令管理忘记解锁scott!

首先&#xff0c;别急&#xff0c;昨天我也是百度弄了很久才弄好&#xff0c;所以今天整理一下&#xff0c;把昨天的小小成果展示出来。 步骤&#xff1a;1.进入黑屏&#xff0c;输入sqlpus&#xff1b; 2.输入用户名&#xff1a;sys&#xff1b; 输入口令&#xff1a;sys(这个…

Primavera P6用户密码锁定及管理员忘记密码处理

经常有一些同行问到&#xff0c;下面是P6 两个相对极端的问题怎么处理 A, 管理员用户被锁定&#xff08;密码还记得&#xff09; B, 管理员忘记密码 处理这类问题一般在需要在数据库层级操作&#xff0c;当然建议信息部&#xff08;或DB&#xff09;如此操作&#xff0c;毕竟不…

oracle11g忘记管理员密码

oracle的sys和system密码是我们经常忘记的&#xff0c;忘记之后我们可以通过sqlplus来修改重置。 首先打开sqlplus&#xff1a;在运行处可直接输入打开 进入窗口后&#xff0c;首先输入 sqlplus/as sysdba 口令不要输入&#xff0c;直接回车 等数据库连接上之后执行sql语…

Oracle用户密码失效解决办法

错误信息 Oracle用户密码失效后&#xff0c;通常会报如下的错误&#xff1a; java.sql.SQLException: ORA-28001: the password has expired ORA-28001: the password has expired 查看密码有效期 这时候我们需要用sysdba登陆&#xff0c;登录后执行一下语句&#xff1a; …