leetcode
&HeiDi
这个作者很懒,什么都没留下…
展开
-
leetcode 83. 删除排序链表中的重复元素
83. 删除排序链表中的重复元素C++/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteDuplicates(ListNode* head) {原创 2020-12-02 14:49:56 · 162 阅读 · 0 评论 -
leetcode 141, 142. 环形链表Ι,环形链表Π
题目描述 141/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { ListNode* fast = h原创 2020-11-26 10:49:53 · 184 阅读 · 0 评论 -
leetcode 面试题 02.08. 环路检测
题目描述分析参考 环形链表 快慢指针问题 但是这一题的参数是什么鬼???????????????C++/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *de原创 2020-11-26 10:24:53 · 121 阅读 · 0 评论 -
leetcode 328. 奇偶链表
题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6-&g原创 2020-11-25 20:05:12 · 115 阅读 · 0 评论 -
leetcode打卡 922. 按奇偶排序数组 II
题目给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。双指针1用 i 指向原数组进行遍历;用 k 指向奇数下标,遍历数组时,把奇数放在k下标的位置;k+2用 j 指向偶数下标,遍历数组时,把偶数放在j下原创 2020-11-12 17:34:24 · 255 阅读 · 1 评论 -
leetcode打卡 973. 最接近原点的 K 个点
题目我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释:(1, 3) 和原点之间的距离为 sqrt(10),(-2, 2) 和原点之间的距离为 sqrt(8),由于 sqrt(8) < sqrt(10),(-2, 2)原创 2020-11-11 11:10:49 · 209 阅读 · 0 评论 -
leetcode打卡 1207. 独一无二的出现次数
题目给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true补充C++中unorde原创 2020-10-28 11:12:07 · 148 阅读 · 0 评论 -
leetcode打卡144. 二叉树的前序遍历
题目前序遍历顺序:根节点-左子树-右子树C++ 迭代显示维护一个栈stack/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : v原创 2020-10-27 17:45:18 · 119 阅读 · 0 评论 -
leetcode打卡 1365. 有多少小于当前数字的数字
题目给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。对于 nums[2]=原创 2020-10-27 09:25:11 · 115 阅读 · 0 评论 -
LeetCode打卡 24. 两两交换链表中的节点
思路采用迭代思想,对于链表的题目把图画出来会比较容易理解图示比较清楚,从力扣官方图解截屏如下要创建一个哑节点dummyNode(即图中的dummyHead),时间复杂度:O(n),需要对每个节点进行更新指针的操作空间复杂度:O(1)C++/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() :.原创 2020-10-13 20:04:54 · 148 阅读 · 0 评论 -
leetcode打卡 530. 二叉搜索树的最小绝对差
思路对于二叉搜索树,我们知道中序遍历得到的是一个递增序列,因此我们先对这棵树中序遍历得到一个有序数组,然后再遍历该数组获得节点差的最小值C++/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL.原创 2020-10-12 20:19:13 · 122 阅读 · 0 评论 -
56. 合并区间
56. 合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。分析首先进行排序,对区间利用sort排序,是按照左端点递增排序;用t指向区间右端点,不断更新t,直到原创 2020-05-19 15:09:01 · 107 阅读 · 0 评论 -
动态规划——139单词拆分,152乘积最大子数组,198打家劫舍
139. 单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, w原创 2020-05-12 21:59:39 · 304 阅读 · 0 评论 -
96. 不同的二叉搜索树I /Ⅱ——动态规划
96. 不同的二叉搜索树参考leetcode题解给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 ...原创 2020-05-07 10:36:46 · 168 阅读 · 0 评论 -
动态规划——路径问题
62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达...原创 2020-05-06 23:35:24 · 513 阅读 · 0 评论 -
深度优先搜索——树
98. 验证二叉搜索树 //递归版本class Solution {public: TreeNode* pre; bool isValidBST(TreeNode* root) { if(root){ if(!isValidBST(root->left)){ return false;...原创 2020-05-04 22:03:34 · 2620 阅读 · 0 评论 -
287. 寻找重复数
287. 寻找重复数给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小...原创 2020-05-02 17:58:55 · 246 阅读 · 1 评论 -
240. 搜索二维矩阵 II
240. 搜索二维矩阵 II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14,...原创 2020-05-02 09:46:43 · 131 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置(upper_bound / lower_bound)
34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: n...原创 2020-05-02 09:21:49 · 339 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置——二分法的魔鬼细节 小记
每次遇到二分法,一看就会,一写就废,在力扣上看到一篇很好的总结,因此做一下搬运工参考题解——二分法各种情况及细节剖析,附送小诗一首场景包括寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等零、二分查找框架int binarySearch(int[] nums, int target) { int left = 0,...原创 2020-05-01 23:39:17 · 235 阅读 · 0 评论 -
33. 搜索旋转排序数组(二分)
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], targ...原创 2020-05-01 21:21:37 · 93 阅读 · 0 评论 -
31. 下一个排列
31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1分析这一题就是把数组中的元素组合为一个...原创 2020-04-29 23:22:15 · 110 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点(快慢指针)
19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?分析:快慢指针让快指针先走n步,然后快慢指针一起...原创 2020-04-28 20:37:45 · 248 阅读 · 0 评论 -
力扣309. 最佳买卖股票时机含冷冻期
309. 最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的...原创 2020-04-27 12:25:22 · 174 阅读 · 0 评论 -
leetcode 279 完全平方数
完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解法一:四平方和定理1 = 12 = 1+13 = 1+1+14 = 45 =...原创 2020-04-27 11:27:03 · 251 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器分析这一题首先想到暴力解法,但是肯定超时接着想动态规划,但是没有子问题的值可以利用,因此利用双指针;那么双指针为什么要进行移动呢????双指针指的是面积边界,我们为了获得最大面积,要对指针进行移动;接着想移动哪一个指针呢????这里涉及到短板问题,因此要考虑移动值大的,还是值小的;如果移动值大的,这时双指针中的较小值不变,但是距离却变小了,面积一定减小,因此...原创 2020-04-26 11:57:52 · 130 阅读 · 0 评论 -
二叉树的中序遍历/二叉搜索树与双向链表
递归法class Solution {public: vector<int> res; vector<int> inorderTraversal(TreeNode* root) { if(root == NULL) return res;//先判断根节点是否为空 if(root->left) inorderTraversal(roo...原创 2020-03-29 12:31:03 · 184 阅读 · 0 评论 -
面试题35. 复杂链表的复制
分析采用unordered_map[key,value]来记录key:原链表节点value:新链表节点因此map[key]的值就是value,即新节点;/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _v...原创 2020-03-29 11:13:56 · 106 阅读 · 0 评论 -
面试题34. 二叉树中和为某一值的路径(回溯法待解)
class Solution {public: vector<vector<int>> res; vector<int> tmp;//记录满足条件的临时路径 vector<vector<int>> pathSum(TreeNode* root, int sum) { if(root == NU...原创 2020-03-23 17:36:46 · 98 阅读 · 0 评论 -
力扣——从上到下打印二叉树及其变形(树的层次遍历(借助队列) / vector的reverse操作)
从上到下打印二叉树Ⅰ分析:树的层次遍历,借助队列实现class Solution {public: vector<int> levelOrder(TreeNode* root) { vector<int> res; if(root == NULL) return res; queue<TreeNode*> q;//...原创 2020-03-17 23:42:59 · 135 阅读 · 0 评论 -
面试题58 - I. 翻转单词顺序 / 面试题58 - II. 左旋转字符串 //关于substr函数 //面试题63. 股票的最大利润
面试题58 - I. 翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出:...原创 2020-02-28 13:55:17 · 208 阅读 · 0 评论 -
面试题57. 和为s的两个数字 / 面试题57 - II. 和为s的连续正数序列
面试题57.和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [...原创 2020-02-27 16:25:36 · 281 阅读 · 0 评论 -
面试题55 - II. 平衡二叉树
面试题55 - II. 平衡二叉树分析方法一:先序遍历每一个节点,并比较左右子树高度,如果有>1则返回false根据上一题求二叉树深度的启发,可以先求出左右子树的深度,然后判断深度差的绝对值是否大于1,若大于1,则返回false;class Solution {public: bool isBalanced(TreeNode* root) { if(roo...原创 2020-02-27 16:08:20 · 209 阅读 · 0 评论 -
面试题53 - II. 0~n-1中缺失的数字/ 面试题54. 二叉搜索树的第k大节点/ 面试题55 - I. 二叉树的深度
面试题53 - II. 0~n-1中缺失的数字0到n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:在这里插入代码片输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8分析:本题考查的是二分...原创 2020-02-26 20:23:15 · 155 阅读 · 0 评论 -
剑指offer-连续子数组的最大和
面试题42. 连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-10...原创 2020-02-25 11:56:29 · 98 阅读 · 0 评论 -
剑指offer(层次遍历,带main函数)
面试题52. 两个链表的第一个公共节点注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。分析方法一:双指针法用两个指针p,q分别遍历A,B链表;当p遍历A到末尾时,重新定位p到B的头结点;当q遍历到B的末尾时,重新定位q到A的头结点;直至两节点...原创 2020-02-24 20:08:57 · 185 阅读 · 0 评论 -
剑指offer(关于摩尔投票法)
9.用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出...原创 2020-02-23 16:36:40 · 196 阅读 · 0 评论 -
30.包含main函数的栈
分析第一反应可能是添加一个成员变量存放最小元素的值,每次压入一个新元素进栈时,如果该元素比当前元素小,则更新最小元素。但是如果当前最小元素被弹出了栈,如何得到下一个最小的元素呢?因此,我们发现,仅仅添加一个成员变量存放最小元素时不够的;也就是说当最小元素被弹出栈后,我们希望得到次最小元素。因此在压入这个最小元素之前,我们要把次小元素保存起来。那么我们是不是可以把每次的最小元素(也就是...原创 2020-02-22 22:06:11 · 221 阅读 · 0 评论 -
leetcode刷题——剑指offer
面试题27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]分析二叉树的镜像就是通过交换原二叉树中的左右子树变化而来的因此可以使用递归来做递归返回条件:当前结点为 NULL实现操作:交换当前结点的左右子树class Solution {public: T...原创 2020-02-22 19:42:10 · 151 阅读 · 0 评论 -
leetcode——剑指offer
面试题24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000分析采用双指针:定义两个指针: pre 和 cur ;pre 在前 cur 在...原创 2020-02-20 21:22:48 · 136 阅读 · 0 评论