- 博客(29)
- 收藏
- 关注
原创 LeetCode C++ 算法 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是[0, 50] -100 <= Node.val <= 100 l1和l2均按非...
2021-09-29 10:18:11 206
原创 LeetCode C++ 算法 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]进阶:你能尝试使用一趟扫描实现吗?思路:双指针,快指针先走n步,然后两个指针同时依次向前移动直到快指针到达尾部,则慢指针当前位置为倒数第n+1个结点。/** * D..
2021-09-29 10:03:03 330
原创 LeetCode C++ 算法 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链...
2021-09-29 09:59:23 215
原创 LeetCode C++ 算法 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1 描述前一项,这个数是 1
2021-09-29 09:55:15 179
原创 LeetCode C++ 算法 字符串转换整数 (atoi)
请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"123"...
2021-09-28 23:15:19 180
原创 LeetCode C++ 算法 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <= s.length <= 2 * 105 字符
2021-09-28 23:06:02 132
原创 LeetCode C++ 算法 有效的字母异位词
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false提示:1 <= s.length, t.length <= 5 * 104 s和t仅包含小写字母进阶:如果输入...
2021-09-28 22:46:20 286
原创 LeetCode C++ 算法 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = "leetcode"返回 0s = "loveleetcode"返回 2提示:你可以假定该字符串只包含小写字母。思路:类似哈希表,遍历时用数组计数26个字母中每种字母出现的次数,最后再次遍历找到出现次数为1的。class Solution { int count[26];public: int firstUniqChar(string s) {
2021-09-28 22:42:58 150
原创 LeetCode C++ 算法 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1],就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231<= x <= ...
2021-09-28 22:38:17 140
原创 LeetCode C++ 算法 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a"
2021-09-13 11:38:11 145
原创 LeetCode C++ 算法 旋转图像
给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15...
2021-09-13 10:55:03 185
原创 LeetCode C++ 算法 有效的数独
请你判断一个9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例 1:输入:board = [["5","3",".",".","7"...
2021-09-13 10:46:34 192
原创 LeetCode C++ 算法 两数之和
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], t...
2021-09-13 10:27:12 218
原创 LeetCode C++ 算法 移动零
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。思路:遍历数组,遇到0时计数器+1并删除当前元素,循环计数器次数,将0插入队尾;class Solution {public: void moveZeroes(vector<int>& nums) { ...
2021-09-13 09:52:24 202
原创 LeetCode C++ 算法 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例3:输入:digits = [0]输出:[1]...
2021-09-13 09:50:13 150
原创 LeetCode C++ 算法 两个数组的交集II
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4思路:位运算class Solution {public: int singleNumber(vector<int>& nums) { int result ..
2021-09-13 09:42:49 198
原创 LeetCode C++ 算法 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路:异或运算,相同为0.例:1^1=0;1^0=1;0^1=1;0^0=1;且异或运算满足交换律(a^b^c=b^c^a)class Solution {public: int
2021-09-08 07:54:46 136
原创 LeetCode C++ 算法 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true思路:先排序,再依次对比相邻元素,相等就返回trueclass Solution {public: bool c...
2021-09-08 07:48:52 101
原创 LeetCode C++ 算法 旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为O(1) 的原地算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例...
2021-09-08 07:44:12 125
原创 LeetCode C++ 算法 买卖股票的最佳时机 II
给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天..
2021-09-07 22:57:32 156
原创 LeetCode C++ 算法 删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDupli
2021-09-07 21:06:56 210
原创 数据结构 串
串的定义串(string)是由零个或多个字符组成的有限序列,又叫字符串。一般记为s=“a1a2a3……an”(n>=0),其中s是串的名称,用双引号括起来的是串的值,引号不属于串的内容。串中的字符数数目n称为串的长度。零个字符的串称为空串(nullstring)空格串,只包含空格的串子串与主串,传中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。串的比较字母靠前的小,本质上是使用ASCII编码进行比较。为表示中文,又游乐Unicode编码,为了与
2021-09-03 16:52:05 469
原创 数据结构 栈与队列2
队列的定义队列(queue)是只允许在一端进行插入操作,而在另外一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列的抽象数据类型1.建立一个空队列2.若存在队列,销毁3.清空队列4.判断是否为空5.若存在且非空,返回队头元素6.若存在,插入新元素并称为队尾元素7.删除队头元素,返回其值8.返回元素个数循环队列队列顺序存储的不足假溢出,即实际仍有空位
2021-09-03 14:59:40 157
原创 数据结构 栈与队列1
栈的定义浏览网页时的后退键,word、photoshop等文档或图像编辑软件的撤销(undo)操作,都是使用栈来实现的。栈是限定仅在标尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构栈的插入操作,叫做进栈,也成压栈、入栈。栈的删除操作,叫做出栈,有的也叫作弹栈。进栈出栈的变化形式出栈只需要保证是栈顶元素就可以
2021-09-03 14:13:09 126
原创 数据结构 线性表3
静态链表用数组描述的链表叫做静态链表,这种描述方法另名游标实现法。#define MAXSIZE 1000 /* 存储空间初始分配量 *//* 线性表的静态链表存储结构 */typedef struct { ElemType data; int cur; /* 游标(Cursor) ,为0时表示无指向 */} Component,StaticLinkList[MAXSIZE];数组第一个元素cur用来存放备用链表(空闲空间)第一个结点的下标。数组最后一个元...
2021-09-03 10:10:20 151
原创 数据结构 线性表2
单链表的读取Status GetElem(LinkList L,int i,ElemType *e){ int j; LinkList p; /* 声明一结点p */ p = L->next; /* 让p指向链表L的第一个结点 */ j = 1; /* j为计数器 */ while (p && j<i) /* p不为空或者计数器j还没有等于i时,循环继续 */ { p = p->next; /* 让p指向下一个结点 */ ++j
2021-09-02 20:24:12 64
原创 数据结构 线性表1
线性表的定义线性表:零个或多个数据元素的有限序列。元素之间有顺序,第一个元素无前驱,最后一个元素无后继。线性表的元素的个数定义为线性表的长度,当个数为零时,称为空表。ai是第i个元素,称i为数据元素ai在线性表中的位序。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。线性表的抽象数据类型...
2021-08-23 11:17:26 313
原创 数据结构 算法
两种算法的比较1+2+3…………+100int i,sum = 0,n = 100;for(i = 1;i <= n ;i++){ sum = sum + i;} printf("%d",sum);高斯求和(求等差数列的和的算法)int sum = 0,n = 100;sum = (1 + n) *n / 2;printf("%d",sum)算法定义算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每一条指令表示一个或多个操作。算
2021-08-20 09:14:35 408
原创 数据结构 数据结构绪论
基本概念和术语数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。(包含数值类型与非数值类型)数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。数据项一个数据元素可以由若干个数据项组成。数据对象是性质相同的数据元素的集合,是数据的子集。数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构。逻辑结构与物
2021-08-17 10:58:45 124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人