自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法第八章课后练习 8.10

算法第八章课后练习 8.10题目 8.10 利用推广的方法证明NP-完全性。对以下每个问题,请通过证明它是本章某个NP-完全问题的推广,说明它是完全的。 (a) 子图同构:给定两个作为输入的无向图G和H,判断G是否为H的一个子图(即删除H中的某些顶点或边后,所得的新图最多只需再修改某些顶点的名称,即可与G相同),且如果是,返回由V(G)到V(H)的相关映射。

2018-01-06 11:15:20 358

原创 leetcode 712 Minimum ASCII Delete Sum for Two Strings

712 Minimum ASCII Delete Sum for Two Strings 给你两个字符串s1和s2,在它们中分别删除一些字符后,使得s1和s2剩下的字符串相等。求删除的字符串的最小ASCII和。算法首先将题意转换一下:因为s1和s2给定后,它们的总的ASCII和是不变的,求删除掉的字符的最小ASCII和,就是求最后s1和s2剩下的那个相等的字符串的最大ASCII和。也就是我们

2017-12-26 14:38:01 277

原创 leetcode 413 Arithmetic Slices

leetcode 413 Arithmetic Slices 给定一列整数,求含有的算数片个数。 算数片定义:至少包含3个整数,每个相邻整数的差值相等。eg: 1,2,3算法 同样的,使用动态规划求解。找到状态n和状态n-1的关系。在这里就是找到n个整数包含的算数片的个数和前n-1个整数包含的算术片的关系。很明显,dp(n) = dp(n-1) +1dp代表前n个整数包含的算数片

2017-12-25 13:16:24 253 1

原创 647 Palindromic Substrings

647 Palindromic Substrings 求一个字符串的回文子串的个数,子串位置不同即算不同的回文子串。 eg: aaa有6个回文子串,a,a,a, aa, aa, aaa.算法1:中心扩散法 计算从每一个中心位置向两边扩散得到的回文串个数,共有n+n-1个中心位置codeclass Solution {public: int countSubstring

2017-12-21 11:49:34 248

原创 leetcode 198 House Robber

leetcode 198 House Robber 有一列非负整数,需要你从中选择一个序列,要求所选择序列中整数在原始序列中不能相邻,且序列的和最大,返回最大值。算法 利用动态规划解题,找出状态转移方程。dp(n)=dp(n-1) + value(n) (islastchoosed=false&&n>=3)​

2017-12-19 23:49:25 166

原创 leetcode 53 Maximum Subarray

leetcode 53 Maximum Subarray 给定一个数组(至少包含一个整数),找出一个该数组的连续子数组,并且该连续子数组的和最大,返回最大值。算法 同样使用动态规划解题,找出状态n和n-1之间的关系,然后从0到n-1遍历一遍得到结果状态n和n-1的关系在每个状态下记录两个值,一个是当前的最大值largest,一个是当前的连续子数组的和nowsumnowsum(n)=num

2017-12-19 13:03:04 169

原创 leetcode 70 Climbing Stairs

leetcode 70 Climbing Stairs 假设爬到楼顶需要走n步,n为正整数。你每次只能爬一步或者两步,请问有多少种爬法。算法 利用动态规划解题,找出状态n和状态n-1之间的关系,即状态转移方程,然后从前往后遍历一遍,求得结果。状态n和n-1的关系 n比n-1总步数多了一步,n的爬法种数可以从n-1的爬法种数得到: 在n-1的所有爬法后再加1步 把n-1的

2017-12-18 23:49:50 171

原创 Leetcode 112 path sum & 113 path sum 2

Leetcode 112 path sum & 113 path sum 2 给定一棵二叉树和一个整数。path sum 要求判断在该二叉树中是否存在一条根节点到叶子结点的路径,路径上的数字和等于给出的整数。path sum 2要求返回所有满足的路径。算法遍历整棵二叉树,在遍历的同时,若向子代走,则将节点值加起来,若回溯,则减掉节点值。对于path sum,在每个叶子结点处进行判断当前和是否

2017-12-01 17:19:38 300

原创 Leetcode 102 & 106

Leetcode 102 & 106 分别根据一棵二叉树的inorder和preorder、inorder和postorder构造该二叉树。pre & in算法根据前序的root,在中序中找到该root的位置,该位置左部分为原树的左子树,右部分为原树的右子树。然后在左右两部分中进行相同的操作。只需注意左部分的根,按照给定前序依次遍历就好,右部分的根要在给定的前序中跳过左部分。codestruc

2017-12-01 13:10:59 309

原创 leetcode99

Question 99– Recover Binary Search Tree 交换了一个BST二叉查找树的两个元素,要求恢复该BST算法 base:因为二叉查找树的中序遍历结果是升序排列的,所以交换任意两个元素后,交换中的小元素被交换到序列的后面,大元素被交换到序列的前面。算法过程伪代码:/** * Definition for a binary tree node. * stru

2017-11-29 20:19:16 575

原创 leetcode

Question 212 – Word Search II 给定一个字符表和一个string集,返回能在字母表中找到的该string集中的string集。一个string能在字符表中找到表示,在字符表中存在一些连续相邻的字符组成该string。算法对每一个string分别去在字符表中查找,若能找到则将该string添加到返回集中。 对于一个特定的string在字符表中查找时:以每一个字符为起

2017-11-23 12:47:37 182

原创 leetcode

Quetion 79– Word Search 给定一个字符表和一个字符串,判断能否用相邻的字符连接起来形成该字符串。算法对每个表中的字符进行一遍DFS。在每次DFS的过程中,记录当前访问过的节点,以免重复访问。若能找到则返回true;否则返回false。Codeclass Solution {public: bool exist(vector<vector<char>>& boar

2017-11-23 11:04:18 193

原创 leetcode

Question 98 – Validate Binary Search Tree 判断一棵树是不是二分查找树。算法用DFS算法。每次递归时传递一个最大值和一个最小值。对于当前节点左边的树有一个最大值,右边的树有一个最小值。Codeclass Solution {public: bool isValidBST(TreeNode* root) { return isva

2017-11-22 12:44:04 192

原创 leetcode

Question 488 – Zuma Game 五种颜色:R(red)、Y(yellow)、W(white)、B(blue)、G(green)。 给定两个颜色字符串,名为board和hand。你每次需用hand中的一种颜色插入board中,使board中形成多于或等于3种相同的颜色连在一起,然后消除掉它们。给定的board颜色数不多于20,且board初始没有3个或更多相同颜色连在一起的

2017-11-22 11:01:38 241

原创 leetcode

Question 329– Longest Increasing Path in a Matrix 给定一个全是int数的矩阵,返回最长递增路径的长度。从一个位置只能向上下左右四个方向移动。 eg: 矩阵: ⎡⎣⎢332422561⎤⎦⎥ \left[ \begin{matrix} 3&4&5\\3&2&6\\ 2&2&1 \end{matrix} \right]

2017-11-18 14:12:53 186

原创 leetcode

Question 210–Course Schedule II 题设和Course Schedule一样,只不过要求能完成所有课程时返回一个可行的上课顺序;否则,不能完成所有课程时,返回一个空;算法对于[a,b]点对,将b作为边的起始点,a作为边的终点。 用BFS,先将每个点的入度算出来。然后逐渐将入度为0的点去掉,将该点的入度改为-1,并将该点加入要返回的队列中,同时将该点的邻接点的入度减

2017-11-14 00:03:17 251

原创 leetcode

Question 207–Course Schedule 总共有n个课程,标记为0到n-1。有些课程有约束条件,比如[1,4]代表你在上课程1之前必需先上课程4。现在给你课程总数和一些有约束的课程对的集合,请判断能否上完所有课程。算法 此题将那些约束的课程对看成是图的边,如[1,4]表示从点1到点4的一条有向边,然后判断该图中有没有环。有环则代表存在一些课程相互冲突,不能上完所有课程;否则

2017-11-13 09:13:20 189

原创 leetcode

Question41–First Missing Positive 给定一串未排序的整数,找出第一个漏掉的正整数。 eg. [-1,5,0,1,4,3],结果为2算法首先遍历一遍,把每个整数放在自己的位置上,如nums[2]为5,则把nums[2]和nums[4]交换。 遍历第二遍,返回第一个nums[i]!=i+1的i+1.codeint firstMissingPositive(v

2017-10-23 23:25:35 195

原创 leetcode

Question 40–Combination Sum 2 给定一组有重复元素的整数集和一个目标元素target,整数集中的每个整数只能使用一次,求出该整数集中所有的和为target的整数组合。codevoid csiterator(int start,vector<int>& basics, vector<int>& candidates, int target, vector<vector

2017-10-23 15:40:27 170

原创 leetcode

Question 39–Combination Sum 给定一组没有重复元素的整数和一个目标整数target,在该整数集找出和为target的所有组合,该整数集中的每个整数可以使用任意次数,没有限制。codevoid csiterator(int start,vector<int>& basics, vector<int>& candidates, int target, vector<vec

2017-10-23 15:23:27 193

原创 C语言命令行参数解析函数

getopt()函数头文件#include <unistd.h>函数参数int getopt(int argc, char* const argv[], const char* optstring);extern char* optarg;extern int optind,opterr,optopt;参数argc,argv直接从main(int argc, char * argv[])中传递

2017-10-15 20:36:58 1236

原创 leetcode

Question 47–Permutations II 给定一个含有重复元素的整数集合,给出它的所有排列。code迭代:vector<vector<int>> permute(vector<int>& nums) { //sort(nums.begin(), nums.end()); vector<vector<int>> permutes; vector<int> t

2017-10-15 11:21:29 212

原创 leetcode

Question 46– Permutations 给定几个没有重复的整数,求出它们的所有排列。算法前n个元素的全排列等于在前n-1的的每一个排列中加入第n个元素后形成的所有排列。codevector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> permutes; if(nums.size()==0)

2017-10-15 09:35:22 165

原创 leetcode

Question 90–Subsets II 给定一个整数集合,含有重复的元素,请给出所有的子集(不含重复集合)。算法先把原集合排序,然后像上篇博客中的Subsets中的算法一样。Codevector<vector<int>> subsetsWithDup(vector<int>& nums){ sort(nums.begin(),nums.end()); vector<vect

2017-10-14 21:26:57 202

原创 leetcode

Question78–Subsets 给定一个整数集,集合中元素各不相同,求出所有子集。算法n个整数的子集N等于下面两部分:前n-1个整数的子集QQ中的每个集合中再加入第n个元素形成的集合eg:{2,3}的子集:{},{2},{3},{2,3}   {2,3,4}的子集:1. 第一部分({2,3}的子集): {},{2},{3},{2,3}                   2.

2017-10-14 20:11:27 167

原创 编译原理词法分析小程序的设计

词法分析设计题目描述 设一语言的关键词、运算符、分界符的个数与单词如下: struct { int number; string str[10]; } keywords={3,”int”,”main”,”return”} ; //关键词 struct { int number; string str[10]; } operators ={5,”+”,”“,”=”,”+=”,”=”}

2017-10-12 14:18:28 2347

原创 leetcode

Question35– Search Insert Position 给定一个按升序排列的int数组,不含重复元素。同时给定一个target元素,若数组中有target,返回相应的下标;若没有,则返回target应插进数组的正确下标。算法二分法,注意一下最后的临界情况就行。Codeint searchInsert(vector<int>& nums, int target) {

2017-10-11 20:18:30 215

原创 leetcode

Question34–Search for a Range 给定一个按升序排列的可以有重复元素的数组,同时给出一个目标元素target,返回target在数组中的开始下标和结束下标。若不在数组中,返回[-1,-1]. eg:[1,2,2,4,5,5,7]和5,则返回[4,5]。算法使用二分法,缩小区间,直到中间位置为target。分别在找到target的那个区间的左、右区间进行二分查找,确

2017-10-11 19:55:48 140

原创 leetcode

Question33–Search in Rotated Sorted Array 给你一个按升序排列的“循环数组”(元素各不相同),即最小元素可以在数组的任意位置。eg:[1,2,3,4,5];[4,5,1,2,3]; []; [1]。同时给你一个目标元素target,返回其在数组中的下标。若不在数组中,返回-1。method 1 从头到尾扫一遍,返回相同元素的下标。code:int

2017-10-11 19:03:17 173

原创 leetcode

Question31–Next Permutation 对于一个给定的整数序列,输出它的下一个字典顺序的序列。若给出的序列已经最大,则输出最小序列。 eg:5,4,3 –>3,4,5      1,2,3 –>1,3,2 –>2,1,3 –>2,3,1 –>3,1,2 –> 3,2,1method 1记该序列为a,假设该序列共有n位,我们从后往前看,i(从n-1到1) 很容易知

2017-10-10 14:19:13 170

原创 leetcode

Question29–Divide Two Integers 给定两个int型数,一个被除数,一个除数(不为零),在不使用乘法、除法、取余操作的条件下,求出商。若溢出,则返回INT_MAX。算法溢出的情况只有一种,即被除数为INT_MIN,除数为-1.确定符号,两个数同号为正,异号为负,因此可以用异或操作来定符号。当然最容易的就是一直用被除数减去除数,记录次数,直到被除数小于除数。但这样

2017-10-04 21:57:36 252

原创 leetcode

Question28–Implement strStr() 给出一个字符串在另一个字符串中第一次出现的索引,若没出现返回-1算法遍历比较,注意几种特殊情况就好Codeint strStr(string haystack, string needle) { int haysize=haystack.size(), needsize=needle.size(); if

2017-09-29 20:40:07 162

原创 leetcode

Question27–Remove Element 将一个给定数组中和给定目标数相同的数删掉,要求在原数组上进行操作。算法和上篇博客中讲的26题一样的解法。Codeint removeElement(vector<int>& nums, int val) { int vsize=nums.size(); if(vsize==0) return 0;

2017-09-29 20:35:33 181

原创 leetcode

Question26–Remove Duplicates from Sorted Array 给定一个排好序的数组,消除重复的数,除了给定的数组不能开额外的数组,空间复杂度必须是常数。算法因为是排好序的,从头遍历一遍,将不同的元素依次存入原数组。Codeint removeDuplicates(vector<int>& nums) { int vsize=nums.size()

2017-09-29 20:31:25 176

原创 leetcode

Question22–Generate Parentheses 给你n对括号“()”,返回它们的所有有效组合。算法n对括号,即共有2n个括号字符。从第一位到第2n位,每次按照规则对已有字符串一位一位的构造。在构造过程中用一个left和right分别标记该构造串的左括号数和右括号数。第一位必须是 ‘(’ 当left等于right,只能增加 ‘(‘当left大于right,且left等于n时

2017-09-29 13:21:45 172

原创 leetcode

Question21–Merge Two Sorted Lists 给定两个排好序的单链表,将它们归并在一起,并返回新链表的头指针。算法每次将两个链表的头比大小,小的头结点加入新的链表中,并将头小的那个链表的头指针后移。直到一个链表为空,将另一个链表的剩余部分加入新链表。CodeListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {

2017-09-29 09:07:40 204

原创 leetcode

Question20–Valid Parentheses 给定一个仅包含’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’字符的字符串,判断该字符串是否合理。括号必须按正确的顺序关闭。算法建一个栈,遍历一遍字符串,依次将字符入栈。若将要入栈的括号字符与栈顶的括号字符匹配,则不入栈并pop一次。最后判断栈是否为空。需要注意的是,压入第一个字符时,必须判断。Codebool isValid(

2017-09-29 08:42:33 222

原创 leetcode

Question19–Remove Nth Node From End of List 给定一个单链表(不告诉长度),删除倒数第n(n为有效,不用判断)个节点,然后返回链表头指针。要求最好只遍历一次。算法遍历一遍该链表,依次压入到一个节点指针栈。然后执行pop()操作n-1次,top()取出要删除的那个节点的指针记为current并将其从栈中pop()。然后判断此时栈是否为空,若空则原链表的h

2017-09-29 00:19:46 147

原创 leetcode

Question18–4sum 给定一个包含n个int的数组和一个target,找出四个int,使a+b+c+d=target,并且不能有重复的组。算法先对数组排序,从小到大排列。然后找出所有不同的两两组合,并对于每个两两组合,相应的找出其余两个数(假如为a,b),使ab的和等于target减去两两组合。Codevector<vector<int>> fourSum(vector<int>&

2017-09-24 23:16:20 156

原创 leetcode

Question13–Roman to Integer 将1到3999范围内的罗马数字转换为int型数据 method1(stupid)和上篇博客中的question12一样,列出一个二元数组,然后一个一个去找。注意,从低位的大数字开始找,并且要先找IV(XL, CD), 然后找V(L,D)。code:int romanToInt(string s) { int num=0;

2017-09-18 16:20:14 395

空空如也

空空如也

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

TA关注的人

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