![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
桐桐~
小小程序猿,一直在努力
展开
-
leetcode—栈(easy)—4/9
1.有效的括号给定一个只包括’(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。空字符串可被认为是有效字符串。2.最小栈设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。push(x) 将元素x推入栈中pop(x) 删除栈顶元素...原创 2019-04-09 10:45:36 · 71 阅读 · 0 评论 -
leetcode—5/5
1.在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn)级别。如果数组中不存在目标值,返回[-1, -1]。思路:复杂度要求为二分查找。处理nums[mid] == target的情况 — 线性遍历。vector<int> searc...原创 2019-05-05 15:08:30 · 112 阅读 · 0 评论 -
leetcode—4/30
1.两数相除给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和mod运算符。返回被除数dividend除以除数divisor得到的商。思路:加减计数:被除数一直减除数,直到剩余的差小于除数 — 超时移位设divid,divis分别为dividend,divisor的绝对值。以divid = 73(二进制0100 1001),divis = ...原创 2019-04-30 10:46:37 · 108 阅读 · 0 评论 -
leetcode—5/8
1.全排列II给定一个可包含重复数字的序列,返回所有不重复的全排列思路:用set去重void traceback(vector<int>& nums, vector<int>& temp, vector<int>& flag, set<vector<int>>& s) { if...原创 2019-05-08 15:42:04 · 93 阅读 · 0 评论 -
leetcode—5/13
1.合并区间给出一个区间的集合,请合并所有重叠的区间。思路:首先按照区间起始坐标对intervals进行排序,然后合并。vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> res; ...原创 2019-05-13 21:31:03 · 208 阅读 · 0 评论 -
leetcode—5/6
1.组合总和给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。所有数字(包括target)都是正整数。解集不能包含重复的组合。...原创 2019-05-06 18:49:19 · 68 阅读 · 0 评论 -
leetcode—5/14
1.螺旋矩阵II给定一个正整数n,生成一个包含1到n2的所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。思路:同螺旋矩阵,只需按圈遍历,并为遍历到的每一个元素赋值。vector<vector<int>> generateMatrix(int n) { vector<vector<int>> res(n, vector<i...原创 2019-05-14 10:44:44 · 104 阅读 · 0 评论 -
leetcode—5/9
1.字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。思路:将字符串和异位词列表形成映射将字母转化为26位0-1串vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<s...原创 2019-05-09 16:24:43 · 65 阅读 · 0 评论 -
leetcode—5/7
1.字符串相乘给定两个以字符串形式表示的非负数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。思路:数字相乘的规律假设num1的长度为m,num2的长度为n,那么它们乘积的长度一定不超过m+n。所以创建一个字符数组value保存结果,长度为m+n乘法计算循环遍历两个字符串,将num1[i]和num2[j]相乘,并可以将结果存入到value[i + j...原创 2019-05-07 20:45:20 · 87 阅读 · 0 评论 -
leetcode—5/20
1.颜色分类给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对他们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。使用整数0、1和2分别表示红色、白色和蓝色。思路:两次遍历计数排序,先统计每个元素的个数,然后排序荷兰国旗问题(一次遍历)用三个指针p0,p2和curr来分别追踪0的最右边界,2的最左边界和当前考虑的元素。沿数组移动curr指针,若nums[c...原创 2019-05-20 17:06:07 · 89 阅读 · 0 评论 -
leetcode—4/28
1.两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。思路:我的思路:遍历链表,两个指针进行交换ListNode* swapPairs(ListNode* head) { if(head == nullptr || head -> next == nullptr) ...原创 2019-04-28 18:56:45 · 78 阅读 · 0 评论 -
leetcode—5/3
1.下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。思路:从右向左遍历,只要第i位的数<第i+1位的数,就可以确定第i位是要发生变化的位,在[i+1, nums.size() - 1]之间遍历一遍,找到比第i位大的最小的一个放到第...原创 2019-05-03 11:27:24 · 200 阅读 · 0 评论 -
leetcode—4/23
1.最接近的三数之和给定一个包括n个整数的数组nums和一个目标值target。找出nums中的三个整数,使得他们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。思路:同三个数字之和问题,多一个变量用来存储与target的差2.电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给定数字到字母的映射如下(与电话按键相同)。注意1不对应任...原创 2019-04-23 19:43:11 · 85 阅读 · 0 评论 -
leetcode—回溯算法(easy)—4/16
回溯算法类似于枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解。当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点成为“回溯点”。1.字母大小写全排列给定一个字符串S,通过将字符串S中的每个...原创 2019-04-16 15:26:37 · 168 阅读 · 0 评论 -
leetcode—4/20
1.整数反转给出一位32位的有符号整数,你需要将这个整数中每位上的数字进行反转原创 2019-04-20 20:25:07 · 56 阅读 · 0 评论 -
leetcode—4/21
1.回文数判断一个整数是否是回文数。回文数是指正序(从左到右)和倒序(从右到左)读都是一样的整数。2.盛水最多的容器给定n个非负数a1,a2,…,an,每个数代表坐标中的一个点(i, ai)。在坐标内画n条垂直线,垂直线i的两个端点分别为(i, ai)和(i, 0)。找到其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。思路:利用双指针法int maxArea(vector&l...原创 2019-04-21 20:53:28 · 61 阅读 · 0 评论 -
leetcode—4/17
感觉分类的easy刷的差不多了,今天开始按顺序刷medium吧……1. 两数相加给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字0之外,这两个数都不会以0开头。ListNode* addTwoNumbers(ListNode* l1...原创 2019-04-17 14:47:38 · 63 阅读 · 0 评论 -
leetcode—贪心算法(easy)—4/14
1.模拟行走机器人机器人在一个无限大小的网格上行走,从点(0,0)处开始出发,面向北方。该机器人可以接收以下三种类型的命令。-2: 向左转90度-1: 向右转90度1 <= x <= 9: 向前移动x个单位长度在网格上有一些格子被视为障碍物。第i个障碍物位于网格点(obstacles[i][0], obstacles[i][1])如果机器人试图走到障碍物上方,那么它将停...原创 2019-04-14 10:36:42 · 130 阅读 · 0 评论 -
leetcode—4/26
1.四数之和给定一个包含n个整数的数组nums和一个目标值,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d的值与target相等?找出所有满足条件且不重复的四元组。思路:把四数之和问题转换为三数之和问题。...原创 2019-04-26 11:09:34 · 180 阅读 · 0 评论 -
leetcode—回溯算法(easy)—4/15
1.二进制手表二进制手表顶部有4个LED代表小时(0-11),底部有6个LED代表分钟(0-59)。每个LED代表一个0或1,最低位在右侧。给定一个非负整数n代表当前LED亮着的数量,返回所有可能的时间。思路:对于给定的亮的灯个数num进行分解,分成小时灯个数hoursCnt、分钟灯个数minsCnt对于小时灯个数hoursCnt小时的情况进行构造对于分钟灯个数minsCnt分钟的...原创 2019-04-15 10:07:52 · 158 阅读 · 0 评论 -
leetcode—4/22
1.整数转罗马数字罗马数字包含以下七种字符:I, V, X, L, C, D和M字符数值I1V5X10L50C100D500M1000通常情况下,罗马数字中小的数字在大的数字的右边。特例:+ I可以放在V和X的左边,表示4和9+ X可以放在L和C的左边,表示40和90+ C可以放在D和M的左边,表示400和900给定一个整数,将其转为罗马数字思路:先把数字反转,...原创 2019-04-22 19:09:42 · 80 阅读 · 0 评论 -
leetcode—4/18
1.最长回文子串给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。思路:动态规划问题。对于每一位的每个字母来说,该字母是回文子串。如果下一位字母与其相同,那么该两个字母组成回文字符串。从最长回文字符串长度为3开始遍历,如果该字符串的起点下标为i,终点下标为j,起点与终点相等,并且,在起点和终点之间的字符串也是回文字符串,那么该字符串也是回文字符串。(为什么从3...原创 2019-04-20 19:05:42 · 63 阅读 · 0 评论 -
系统分析与设计
第一章:系统概述系统是一组为实现某些结果相互联系、相互作用的部件的集合体系统具有整体性、目的性、相关性、环境适应性和层次性系统分析员:研究组织中存在的问题和需求,决定人员、数据、过程和信息技术如何最大化地为企业做出贡献。主要分为:程序员/分析员:既有计算机程序员的职责,也有系统分析员的责任业务分析员:专注于系统分析与设计中的非技术方面在需要基于计算机的业务解决方案的人和那些懂得...原创 2019-05-20 21:28:45 · 2620 阅读 · 0 评论 -
leetcode—5/10
1.螺旋矩阵给定一个包含m×n个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中所有元素。思路:矩阵中有多少个圈,每一圈按顺时针方向输出做的我想哭了,注意最后逆向判断的时候该层是否只有一行或这一列,以及min那里加!括!号!vector<int> spiralOrder(vector<vector<int>>& matrix) { ...原创 2019-05-10 19:53:08 · 75 阅读 · 0 评论 -
leetcode—6/2
1.不同的二叉搜索树给定一个整数n,求以1…n为节点组成的二叉搜索树有多少种int numTrees(int n) { int res = 0; if(n == 0 || n == 1) { return 1; } for(int i = 1; i <= n; i++) ...原创 2019-06-02 14:24:19 · 98 阅读 · 0 评论 -
leetcode—6/14
1. 分割回文串给定一个字符串s,将s分割成一些子串,使每个子串都是回文串返回s所有可能的分割方案vector<vector<string>> partition(string s) { vector<vector<string>> res; vector<string> temp; ...原创 2019-06-14 15:03:45 · 99 阅读 · 0 评论 -
leetcode—6/3
1. 二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值(逐层地,从左到右访问所有节点)思路:利用队列vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q; ...原创 2019-06-03 16:27:19 · 101 阅读 · 0 评论 -
leetcode—6/19
1. 重排链表给定一个单链表L: L0 -> L1 ->…-> Ln-1 -> Ln将其重新排列后变为:L0 -> Ln-> L1 -> Ln-1-> L2 -> Ln-2->…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换思路:使用双指针将整个链表分成两段,将后半段链表倒序并插入到前半段链表中void reord...原创 2019-06-19 15:55:38 · 138 阅读 · 0 评论 -
leetcode—6/10
1. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡的二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。思路:本题主要在于寻找链表的中间节点 — 快慢指针定义一个快指针fast一个慢指针slow,快指针一次移动两个节点,慢指针一次移动一个节点。当fast到达链表的尾部节点时,慢指针也就移动到了链表的中间节点...原创 2019-06-10 15:25:54 · 112 阅读 · 0 评论 -
leetcode—6/4
1. 从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树TreeNode* build(vector<int>& preorder, vector<int>& inorder, int s1, int e1, int s2, int e2) { if(s1 > e1 || s2 > e2) ...原创 2019-06-04 16:17:35 · 151 阅读 · 0 评论 -
leetcode—6/20
1. 对链表进行插入排序对链表进行插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表每次迭代中,插入排序只从一个输入数据移除一个待排序的元素,找到它在序列中适当的位置,并将其插入重复直到所有输入数据插入完为止ListNode* insertionSortList(ListNode* head) { ListNode* dumm...原创 2019-06-20 18:34:39 · 216 阅读 · 0 评论 -
leetcode—6/11
1. 二叉树展开为链表给定一个二叉树,原地将它展开为链表思路:非迭代版本从根节点出发,先检测其左子节点是否存在,如果存在则将根节点和其右子节点断开,将左子节点及其后面所有结构一起练到原右子节点的位置,把原右子节点连到原左子节点最后面的右子节点之后。void flatten(TreeNode* root) { TreeNode* cur = root; ...原创 2019-06-11 10:27:55 · 107 阅读 · 0 评论 -
leetcode—6/17
1.加油站在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升你有一辆油箱容量无限的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回-1。思路:两次遍历int canCompleteCircuit(vector<int>& gas...原创 2019-06-17 09:55:14 · 109 阅读 · 0 评论 -
leetcode—6/13
1. 求根到叶子节点数字之和给定一个二叉树,它的每个节点都存放一个0—9的数字,每条从根到叶子节点的路径都代表一个数字。计算从根到叶子节点生成的所有数字之和思路:有几个叶子节点就有几个数字,利用栈实现利用栈实现,非递归int sumNumbers(TreeNode* root) { int res = 0; stack<TreeNode*>...原创 2019-06-13 16:35:22 · 104 阅读 · 0 评论 -
leetcode—5/29
1.反转链表II反转从位置m到n的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度思路:一次遍历的同时采用指针记录关键节点的位置ListNode* reverseBetween(ListNode* head, int m, int n) { if(head == nullptr || head -> next == nullptr) ...原创 2019-05-29 19:24:51 · 87 阅读 · 0 评论 -
leetcode—5/31
1.二叉树的中序遍历给定一个二叉树,返回它的中序遍历思路:递归vector<int> inorderTraversal(TreeNode* root) { vector<int> res; inorder(root, res); return res; } void inorder(TreeNode* r...原创 2019-05-31 19:45:39 · 132 阅读 · 0 评论 -
leetcode—5/15
1.旋转链表给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。思路:先定义一个quick指针向前移动k步,如果k大于节点数,则从回到开始节点。然后slow指针指向开始节点同quick指针一同移动直到quick指针到链表尾部。slow指针的下一个节点即为新链表的头节点,quick指针指向之前链表的头节点。直接按k循环会超时,先取余再循环。ListNode* rotate...原创 2019-05-15 19:18:23 · 66 阅读 · 0 评论 -
leetcode—5/21
1.子集给定一组不含重复元素的数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复子集。思路:回溯算法vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; vector<in...原创 2019-05-21 09:55:06 · 59 阅读 · 0 评论 -
leetcode—5/16
1.矩阵置零给定一个m×n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设置为0。请使用原地算法。思路:利用第一行和第一列来存储矩阵中0所在的行和列。void setZeroes(vector<vector<int>>& matrix) { int rows = matrix.size(); int cols = 0;...原创 2019-05-16 15:07:58 · 74 阅读 · 0 评论 -
leetcode—5/12
1.跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置数组中的每个元素代表你在该位置可以跳跃的最大长度判断你是否能够到达最后一个位置思路从数组的倒数第二个元素看起,每次往前遍历,如果当前元素能够到达最后一个位置,那么就把当前位置开始到最后全部“切断”,以当前元素为最后一个元素,重复第一次的过程,如果遍历到数组的第一个元素,则返回true。bool canJump(vector&l...原创 2019-05-12 15:15:01 · 64 阅读 · 0 评论