自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 leetcode—6/20

1. 对链表进行插入排序对链表进行插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表每次迭代中,插入排序只从一个输入数据移除一个待排序的元素,找到它在序列中适当的位置,并将其插入重复直到所有输入数据插入完为止ListNode* insertionSortList(ListNode* head) { ListNode* dumm...

2019-06-20 18:34:39 209

原创 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 137

原创 leetcode—6/18

1. 复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。必须返回给定的拷贝作为对克隆列表的引用。思路:对于一个节点,它的next指针指向链表中的下一个节点。next指针将所有节点链接起来。方法1:回溯将链表想像成一张图,遍历整个图并拷贝它。当遇到一个新的未访问过的节点,创造一个新的节点。按深度优先进...

2019-06-18 09:42:51 158

原创 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

原创 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 97

原创 leetcode—6/13

1. 求根到叶子节点数字之和给定一个二叉树,它的每个节点都存放一个0—9的数字,每条从根到叶子节点的路径都代表一个数字。计算从根到叶子节点生成的所有数字之和思路:有几个叶子节点就有几个数字,利用栈实现利用栈实现,非递归int sumNumbers(TreeNode* root) { int res = 0; stack<TreeNode*>...

2019-06-13 16:35:22 103

原创 leetcode—6/12

1. 填充每个节点的下一个右侧节点指针II给定一个二叉树struct Node{ int val; Node* left; Node* right; Node* next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NULL。初始状态下,所有next指针都被设置为NULL。思路:因为首先要判断右边的节点,所以要...

2019-06-12 14:45:23 114

原创 leetcode—6/11

1. 二叉树展开为链表给定一个二叉树,原地将它展开为链表思路:非迭代版本从根节点出发,先检测其左子节点是否存在,如果存在则将根节点和其右子节点断开,将左子节点及其后面所有结构一起练到原右子节点的位置,把原右子节点连到原左子节点最后面的右子节点之后。void flatten(TreeNode* root) { TreeNode* cur = root; ...

2019-06-11 10:27:55 105

原创 leetcode—6/10

1. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡的二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。思路:本题主要在于寻找链表的中间节点 — 快慢指针定义一个快指针fast一个慢指针slow,快指针一次移动两个节点,慢指针一次移动一个节点。当fast到达链表的尾部节点时,慢指针也就移动到了链表的中间节点...

2019-06-10 15:25:54 110

原创 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 150

原创 leetcode—6/3

1. 二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值(逐层地,从左到右访问所有节点)思路:利用队列vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q; ...

2019-06-03 16:27:19 99

原创 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 97

原创 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 131

原创 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

原创 leetcode—5/28

1.格雷编码格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数n,打印其格雷编码序列。格雷编码序列必须以0开头。思路:格雷编码的生成过程,G(i) = i ^ (i/2)动态规划问题vector<int> grayCode(int n) { vector<int> dp; d...

2019-05-28 10:35:25 128

原创 leetcode—5/27

1.分隔链表给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。思路:遍历链表,碰到大于或等于目标值的,则将节点接在链表尾部ListNode* partition(ListNode* head, int x) { ListNode* tail = head; ...

2019-05-27 20:38:33 97

原创 各种图

用例图泛化发出箭头的事物“is a”箭头指向的事物特殊一方继承了一般方的特性并增加了新的特性扩展增加了新的功能的时候使用强调现有的用例中没有包含的功能包含用例中更详细的描述类图关联关系双向关联、单向关联、自身关联聚合“has a”,实线空心菱形组合“contains a”,实线实心菱形依赖虚线实箭头表示,是一种弱的关联泛化实线空三角实现虚线空三角...

2019-05-25 14:33:11 142

原创 leetcode—5/23

1.删除排序链表中的重复元素II给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字思路:快慢指针ListNode* deleteDuplicates(ListNode* head) { ListNode* res = new ListNode(0); ListNode* prev = res; prev ->...

2019-05-23 21:04:50 81

原创 敏捷项目管理

业界实践核心理念:价值驱动,研发总是聚焦最高价值最高优先级的工作小批量、短周期反馈,持续研发,快速闭环拥抱变化,根据市场需要和研发能力按需发布客户深度参与,联合创新,运行驱动开发敏捷开发遵循软件客观规律,不断的进行迭代增量开发,最终交付复合客户价值的产品。敏捷宣言个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划...

2019-05-23 19:50:39 1370 1

原创 leetcode—5/22

1.删除排序数组中的重复项II给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改数组并在使用O(1)额外空间的条件下完成。思路:原地删除肯定是双指针,一个指向遍历的元素,一个指向可以写入的位置。考虑fast和current - 1位置的元素是否相等。int removeDuplicates(vecto...

2019-05-22 19:36:34 81

原创 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

原创 系统分析与设计

第一章:系统概述系统是一组为实现某些结果相互联系、相互作用的部件的集合体系统具有整体性、目的性、相关性、环境适应性和层次性系统分析员:研究组织中存在的问题和需求,决定人员、数据、过程和信息技术如何最大化地为企业做出贡献。主要分为:程序员/分析员:既有计算机程序员的职责,也有系统分析员的责任业务分析员:专注于系统分析与设计中的非技术方面在需要基于计算机的业务解决方案的人和那些懂得...

2019-05-20 21:28:45 2614

原创 leetcode—5/20

1.颜色分类给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对他们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。使用整数0、1和2分别表示红色、白色和蓝色。思路:两次遍历计数排序,先统计每个元素的个数,然后排序荷兰国旗问题(一次遍历)用三个指针p0,p2和curr来分别追踪0的最右边界,2的最左边界和当前考虑的元素。沿数组移动curr指针,若nums[c...

2019-05-20 17:06:07 88

原创 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 72

原创 leetcode—5/15

1.旋转链表给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。思路:先定义一个quick指针向前移动k步,如果k大于节点数,则从回到开始节点。然后slow指针指向开始节点同quick指针一同移动直到quick指针到链表尾部。slow指针的下一个节点即为新链表的头节点,quick指针指向之前链表的头节点。直接按k循环会超时,先取余再循环。ListNode* rotate...

2019-05-15 19:18:23 65

原创 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

原创 leetcode—5/13

1.合并区间给出一个区间的集合,请合并所有重叠的区间。思路:首先按照区间起始坐标对intervals进行排序,然后合并。vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> res; ...

2019-05-13 21:31:03 206

原创 leetcode—5/12

1.跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置数组中的每个元素代表你在该位置可以跳跃的最大长度判断你是否能够到达最后一个位置思路从数组的倒数第二个元素看起,每次往前遍历,如果当前元素能够到达最后一个位置,那么就把当前位置开始到最后全部“切断”,以当前元素为最后一个元素,重复第一次的过程,如果遍历到数组的第一个元素,则返回true。bool canJump(vector&l...

2019-05-12 15:15:01 63

原创 leetcode—5/10

1.螺旋矩阵给定一个包含m×n个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中所有元素。思路:矩阵中有多少个圈,每一圈按顺时针方向输出做的我想哭了,注意最后逆向判断的时候该层是否只有一行或这一列,以及min那里加!括!号!vector<int> spiralOrder(vector<vector<int>>& matrix) { ...

2019-05-10 19:53:08 74

原创 第2章 应用层

2.1 应用层协议原理研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。2.1.1 网络应用程序体系结构应用程序体系结构(application architecture) 由应用开发者设计,规定了如何在端系统上组织该应用程序。客户 — 服务器体系结构(client-server architecture)有一个总是打开的主机称为服务器,服务于来自许多称为...

2019-05-09 21:32:52 273

原创 leetcode—5/9

1.字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。思路:将字符串和异位词列表形成映射将字母转化为26位0-1串vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<s...

2019-05-09 16:24:43 64

原创 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 92

原创 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 86

原创 leetcode—5/6

1.组合总和给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。所有数字(包括target)都是正整数。解集不能包含重复的组合。...

2019-05-06 18:49:19 68

原创 第一章 计算机网络和因特网

因特网:互联了遍及全世界的数以亿计的计算设备的网络。所有的设备都成为主机(host) 或 端系统(end system)。端系统通过通信链路(communication link) 和 分组交换机(packet switch) 连接到一起。通信链路由不同的物理媒体组成,包括同轴电缆、铜线、光纤和无线电频谱。链路的传输速率以比特/秒度量(bit/s,或bps)。当一个端系统要向另一台端系统...

2019-05-05 21:43:07 1777

原创 leetcode—5/5

1.在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn)级别。如果数组中不存在目标值,返回[-1, -1]。思路:复杂度要求为二分查找。处理nums[mid] == target的情况 — 线性遍历。vector<int> searc...

2019-05-05 15:08:30 110

原创 leetcode—5/3

1.下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。思路:从右向左遍历,只要第i位的数<第i+1位的数,就可以确定第i位是要发生变化的位,在[i+1, nums.size() - 1]之间遍历一遍,找到比第i位大的最小的一个放到第...

2019-05-03 11:27:24 200

原创 leetcode—4/30

1.两数相除给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和mod运算符。返回被除数dividend除以除数divisor得到的商。思路:加减计数:被除数一直减除数,直到剩余的差小于除数 — 超时移位设divid,divis分别为dividend,divisor的绝对值。以divid = 73(二进制0100 1001),divis = ...

2019-04-30 10:46:37 107

原创 leetcode—4/28

1.两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。思路:我的思路:遍历链表,两个指针进行交换ListNode* swapPairs(ListNode* head) { if(head == nullptr || head -> next == nullptr) ...

2019-04-28 18:56:45 76

原创 leetcode—4/26

1.四数之和给定一个包含n个整数的数组nums和一个目标值,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d的值与target相等?找出所有满足条件且不重复的四元组。思路:把四数之和问题转换为三数之和问题。...

2019-04-26 11:09:34 179

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除