![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++LeetCode
钰捷
good good study,day day up
展开
-
C++LeetCode1 & 167:两数之和
写在最前今天算是真正的开始了C++之旅,前一个多月的学习还算是沉迷在C的基础语法中,今天无意中看到了vector,知道它的存在,正好解决了我昨天在LeeCode做的两数之和那道题的困扰,非常之开心,如获至宝的感觉。从今天开始,我要每天坚持完成一道LeetCode里的C++题目,如果能够完美的实现,我会分享在这里。记录美好,督促自己,监督自己。题目描述:给定一个整数数组 nums 和一个目标...原创 2018-12-19 21:45:24 · 156 阅读 · 0 评论 -
C++ LeetCode简单程序:回文数
写在最前这是一道很经典的判断回文题,题目要求不能将其转换成字符形式,所以我开始想其他方法,并且一点点推导算法公式,然后在一步步调试,纠错。整体做起来感觉很轻松,很愉悦。题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -12...原创 2018-12-20 19:14:58 · 973 阅读 · 0 评论 -
C++ LeetCode: 删除排序数组中的重复项
题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为1,2。 你不需要考虑数组中超出新长度后面的元素。示...原创 2018-12-26 21:39:00 · 289 阅读 · 0 评论 -
C++ LeetCode简单程序:罗马数字转整数
写在最前无法掩饰算法写出来并且程序调试成功的喜悦感,并且会享受想方法和调试的过程。下面这个程序很简单,不过还是想要记录一下,因为当你不知道如何实现的时候,就是困难的。题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L ...原创 2018-12-21 12:04:09 · 253 阅读 · 0 评论 -
C++ LeetCode简单程序:最长公共前缀
写在最前猛一看简单,再一看有点难,然后做着做着简单了。题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z...原创 2018-12-22 11:22:24 · 1008 阅读 · 1 评论 -
C++ LeetCode移动元素
题目描述给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...原创 2019-01-03 18:55:32 · 217 阅读 · 1 评论 -
C++ LeetCode:实现strStr()
题目描述给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1说明...原创 2019-01-04 20:01:22 · 166 阅读 · 0 评论 -
C++ LeetCode简单程序:有效的括号
写在最前这个题目想了好久没有好的方法,就在网上找了一下思路,正好最近在看数据结构和算法,一下子就get了,利用堆栈来实现。题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true...原创 2018-12-25 21:08:04 · 182 阅读 · 0 评论 -
C++ LeetCode 53:最大子序和
前言这道题目很快就想出了思路,实践时一步步完成,感觉很兴奋。大概思路是:首先如果sum<0时,不进行下一项加和,将sum置零;将求和过程中sum最大值存储在一个新的变量maxSum中。时间复杂度为 O(n),还可以进一步优化。题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2...原创 2019-01-07 16:56:27 · 201 阅读 · 0 评论 -
C++:智能指针模板类
三个智能指针模板:auto_ptr、unique_ptr、shared_ptr作用:定义了类似指针的对象,将new获得的地址赋给这种对象,当智能指针过期时,这些内存将自动被释放,不需要再添加delete。条件:1、头文件必须包含memory,#include;2、智能指针模板位于名称空间std,std::或using namespace std;三者的区别:1、所有权。只能有一个智能指...原创 2019-01-21 19:32:15 · 223 阅读 · 0 评论 -
C++Leetcode35:搜索插入位置
前言很简单的一道题,二分查找的方法想的复杂了,一直没有调试出来结果。1、一次遍历。时间复杂度为O(n);2、二分查找–再遍历。3、待优化。题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6...原创 2019-02-14 21:17:51 · 105 阅读 · 0 评论 -
C++Leetcode69:x的平方根
前言这道题在一个月前,想了1个小时都没有思路的,现在可以在半个小时内做出来,可见自己在进步。1、二分查找2、待优化题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, ...原创 2019-02-14 21:59:31 · 391 阅读 · 0 评论 -
C++ LeetCode70:爬楼梯
前言刚开始想的是用排列组合的方法,然后将1~5的结果分别列写出来:1->12->23->34->55->8发现:从第三项开始,每一项等于前两项之和。这种规律叫斐波那契数列:f(n)=f(n-1)+f(n-2),n>=3那通过递归的方法就很容易实现了。题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶每次你可以爬 1 或 2 个台原创 2019-01-29 12:53:24 · 155 阅读 · 2 评论 -
C++Leetcode278:第一个错误版本
前言1、暴力解法。遍历查找。时间复杂度为O(n)。2、二分查找(无递归)。时间复杂度为O(logn)。3、待优化。题目你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你...原创 2019-02-15 10:53:06 · 132 阅读 · 0 评论 -
C++Leetcode349:两个数组的交集
前言1、暴力解法。两层遍历数组。count()函数很好用嘛~~时间复杂度为O(n^2)2、排序后遍历。待添加~3、待优化。题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说...原创 2019-02-15 12:36:52 · 448 阅读 · 0 评论 -
C++Leetcode374:猜数字大小
前言1、暴力解法。2、二分查找。3、待优化。题目我们正在玩一个猜数字游戏。 游戏规则如下:我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。每次你猜错了,我会告诉你这个数字是大了还是小了。你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0):-1 : 我的数字比较小1 : 我的数字比较大0 : 恭喜!你猜对了!示...原创 2019-02-15 13:13:26 · 181 阅读 · 0 评论 -
C++Leetcode235:二叉搜索树的最近公共祖先
前言1、递归。2、待优化。题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例...原创 2019-02-21 14:00:34 · 127 阅读 · 0 评论 -
C++Leetcode21:合并两个有序链表
前言对链表的操作还不是很熟悉,感觉总有一个弯转不过来,需要多练呀~1、交替遍历。2、待优化。题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4实现方法一、交替遍历/** * Definition...原创 2019-02-16 15:56:10 · 123 阅读 · 0 评论 -
C++Leetcode83:删除排序链表中的重复元素
前言有一些题目,套路还是很相似的。这不,刚刚做完了21,就用21一样的方法完成了。1、遍历比较。类似于21的方法一。2、待优化题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1-&原创 2019-02-16 16:42:14 · 203 阅读 · 0 评论 -
C++Leetcode141:环形链表
前言1、快慢指针。2.待优化。题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2...原创 2019-02-16 19:04:36 · 127 阅读 · 0 评论 -
C++Leetcode404:左叶子之和
题目计算给定二叉树的所有左叶子之和。示例:在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。思路昨天想这道题一个小时左右没做出来,晚上躺在床上接着想,后来突然想到:只要把判断右叶子的条件加到递归里面就可以了,其他都不用变。就迫不及待的想要试一下,果不其然~哒哒,提交成功了!1、递归再求和。先采用递归的方法,求得所有的左叶子节点保存在一个动态数组中,然后再遍历数组求和...原创 2019-02-22 09:45:09 · 132 阅读 · 0 评论 -
C++Leetcode617:合并二叉树
题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:注意: 合并必须从两个树的根节点开始。思路1、递归。同时递归2个二叉树,以第一个树作为基准,将第二个树的值加到第一个树上。实现方...原创 2019-02-22 10:52:25 · 196 阅读 · 0 评论 -
C++Leetcode965:单值二叉树
题目如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1, 100]。每个节点的值都是整数,范围为 [0, 99] 。思路1、递归。递归判断每个...原创 2019-02-22 11:04:27 · 122 阅读 · 0 评论 -
C++Leetcode700:二叉搜索树中的搜索
题目给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如:你应该返回如下子树:在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。思路1、递归。因为是二叉搜索树,所以就比较简单。将所给的值与根节点值比较大小,进行递归运算。(递归时,要特别留意带有返回值...原创 2019-02-22 11:34:39 · 165 阅读 · 0 评论 -
C++Leetcode160:相交链表
前言1、暴力解法。分别遍历两个链表,找到交点。时间复杂度为O(n^2)2、待优化。题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference ...原创 2019-02-16 20:00:41 · 219 阅读 · 0 评论 -
C++Leetcode669:修减二叉搜索树
题目给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例1:示例2:思路1、递归。实现方法一、递归/** * Definition for a binary tree node. * struct TreeNode {...原创 2019-02-22 11:58:31 · 137 阅读 · 0 评论 -
C++Leetcode872:叶子相似的树
题目请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。提示:给定的两颗树可能会有 1 到 ...原创 2019-02-22 13:22:40 · 204 阅读 · 0 评论 -
C++Leetcode538:把二叉搜索树转换为累加树
题目给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:思路1、递归。每棵树都是从右底向上->树根做递归,求累加和,将和替换节点的值。实现方法一、递归/** * Definition for a binary tree node. * struct Tr...原创 2019-02-22 14:39:05 · 233 阅读 · 0 评论 -
C++Leetcode203:移出链表元素
前言1、暴力解法。遍历链表2、待优化。题目删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5实现方法一、暴力解法/** * Definition for singly-linked list. * struct List...原创 2019-02-17 12:15:48 · 156 阅读 · 0 评论 -
C++Leetcode206:反转链表
前言最近刚看过一个课程,自己实现一个链表,其中一个功能函数为:反转链表。拿来使用,效果很好。1、两端分别互换。遍历链表,进行首尾互换。2、待优化。题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NU原创 2019-02-17 12:48:04 · 124 阅读 · 0 评论 -
C++Leetcode237:删除链表中的节点
前言因为只知道要删除的节点,不知道前一个节点,只能将后一个节点的值复制到当前节点,然后将后一个节点删除。题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 ...原创 2019-02-17 13:47:12 · 280 阅读 · 0 评论 -
C++Leetcode897:递增顺序查找树
题目给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :提示:给定树中的结点数介于 1 和 100 之间。每个结点都有一个从 0 到 1000 范围内的唯一整数值。思路1、暴力解法。中序遍历二叉树,将值逐个存入一个动态数组;然后遍历数组,建一个新的树。实现方法一、暴力解法/** * Definition fo...原创 2019-02-22 16:40:46 · 241 阅读 · 0 评论 -
C++Leetcode653:两数之和 IV - 输入BST
题目给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:案例 2:思路1、暴力解法。中序遍历二叉树,将每个节点的值存入一个动态数组,然后再二层遍历数组判断是否存在两数之和。实现方法一、暴力解法/** * Definition for a binary tree node. * struct TreeNode...原创 2019-02-22 17:47:19 · 184 阅读 · 0 评论 -
C++ LeetCode169:求众数
前言现在在集中看分治法,所以这道题现在只实现两种解法:暴力解法:二层循环遍历序列,对元素进行计数,将结果>n/2的数返回。时间复杂度为O(n^2)分治法:将序列从中间一分为二,求出左、右最多的数,如果两者相等,则直接返回这个数;如果两者不相等,再分别遍历序列求出这两个数在整个序列中含有的数量,返回较大的那个数。时间复杂度为O(nlong(n))题目给定一个大小为 n 的数组,找...原创 2019-02-11 22:00:25 · 820 阅读 · 1 评论 -
C++Leetcode217:存在重复元素
题目给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 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思路1、经典做法:哈希集。实现方法一、哈希集...原创 2019-02-22 22:32:46 · 79 阅读 · 0 评论 -
C++Leetcode171:Excel表列序号
题目给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3…Z -> 26AA -> 27AB -> 28…示例 1:输入: “A”输出: 1示例 2:输入: “AB”输出: 28示例 3:输入: “ZY”输出: 701思路1、哈希映射。将A~~Z和1~26相应射到map中。然后...原创 2019-02-27 15:52:27 · 722 阅读 · 0 评论 -
C++Leetcode561:数组拆分 I
题目给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。示例 1:输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示:n 是正整数,范围在 [1, 10000].数组中...原创 2019-02-27 16:29:13 · 351 阅读 · 0 评论 -
C++Leetcode908:最小差值 I
题目给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:6解释:B...原创 2019-02-27 16:49:53 · 195 阅读 · 0 评论 -
C++Leetcode136:只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路1、哈希表。将数组存入哈希表中,如果重复出现,就从哈希表中删除,最后哈希表中就剩下只出现过一次的数字。注:...原创 2019-02-23 10:17:24 · 208 阅读 · 0 评论 -
C++Leetcode876:链表的中间节点
前言做出来最快的一次,只用了几分钟,并且调试一次通过。通过连续做了几道有关链表的题,逐渐对链表有了一些理解,并且可以自己独立用链表来完成题目。1、双指针法。使用快慢指针遍历链表,判断快指针的终点位置,最后得到慢指针的位置就是中间节点。2、待优化。题目给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,...原创 2019-02-18 10:22:44 · 190 阅读 · 0 评论