leetcode1-240题中文题解,md格式,java版本 有题目有题解有代码 需要使用markdown打开
2021-05-25 19:47:55 546KB leetcode 题解 中文 java
1
该书包含了LeetCode所有题目的答案,使用C++编写,编码规范良好。
2020-01-30 03:14:29 815KB c语言 LeetCode 题解
1
该文档为《LeetCode题解》,程序员面试必备。主要是数据结构方面的知识,包括:数组、链表、栈、队列、树、图、查找、排序、动态规划以及贪心算法。包含题目130道左右,每道题目都给了不同的解法,方便大家面试前练练手感~~~蟹蟹
目录3.3 String to Integer(atoi585.1.5 Binary Tree Level or3.4 Add Binary59der traversal il23.5 Longest Palindromic Substring. 605.1.6 Binary Tree Zigzag3.6 Regular Expression Matching. 64Level order traversal3.7 Wildcard Matching5.1.7 Recover Binary Search3.8 Longest Common Prefix67Tree963.9 Valid Number685.1.8 Same tree983. 10 Integer to roman705.1.9 Symmetric Tree93.11 Roman to Integer715.1.10 Balanced Binary Tree.. 1003. 12 Count and say725.1.11 Flatten Binary Tree to3.13 Anagrams...........73Linked list1013. 14 Simplify Path745.1.12 Populating next Right3.15 Length of last Word75Pointers in each node第4章栈和队列7710341栈52二叉树的构建1054.1.1 Valid Parentheses..,. 775.2.1 Construct Binary Tree4.1.2 Longest Valid Parenfrom preorder andtheses78order traversal1054.1.3 Largest Rectangle in5.2.2 Construct Binary TreeHistogram80from Inorder and pos4.1.4 Evaluate reverse poltorder traversal,.,,.106ish notation5.3二叉查找树1074.2队列835.3.1 Unique Binary Search第5章树Trees1078451二又树的遍历845.3.2 Unique Binary Search5.1.1 Binary Tree PreorderTrees il108ravers845.3. 3 Validate Binary Search5.1.2 Binary Tree InorderTree109Traversal865.3.4 Convert Sorted Array5.1.3 Binary Tree Postorderto binary Search Tree. 110Traversal885.3.5 Convert Sorted list to5.1.4 Binary Tree Level OrBinary Search Tree111der traversal915.4又树的递归113目录5.4.1 Minimum Depth of Bi8.3.1 next_permutation.. 14nary Tre113832重新实现 next_permu5.4.2 Maximum Depth of Bitation141nary tree1148.33递归1425.4.3 Path Sum1158.4 PermutationsⅡ14354.4 Path sunⅡ1168.4.1 next_permutation...1435.4.5 Binary Tree Maximum842重新实现 next_permuPath Sun........117tation1435.4.6 Populating Next Right84.3递归143Pointers in each node 1188.5 Combinations ,,,,,,, 1455.4.7 Sum root to leaf num85.1递归145bers1208.52迭代1468.6 Letter Combinations of a第6章排序121Phone number1466.1 Merge Sorted array86.1递归1476.2 Merge Two Sorted Lists122862迭代1486. 3 Merge k Sorted Lists.1226.4 Insertion Sort list123第9章广度优先搜索1496.5 Sort list1249.1 Word Ladder1496.6 First Missing positive1269.2 Word Ladder il1516.7 Sort Colors....1279.3 Surrounded Regions15394小结154第7章查找130941适用场景1547. 1 Search for a range130942思考的步骤1547.2 Search Insert Position...,., 131943代码模板1557.3 Search a 2D Matrix132第10章深度优先搜索160第8章暴力枚举法13410. 1 Palindrome Partitioning1608.1 Subsets...,,,,,,.....13410.2 Unique Paths16381.1递归13410.21深搜16381.2迭代13610.22备忘录法1638.2 Subsets il13710.23动规16482.1递归13710.24数学公式16582.2迭代14010.3 Unique Paths II1668.3 Permutations14110.31备忘录法166目录0.3.2动规16713.4 Maximal Rectangle19610.4 N-Queens167 13.5 Best Time to Buy and Sell Stock10.5N- QueensⅡ170II19710.6 Restore ip addresses17113.6 Interleaving String19810.7 Combination Sum17213.7 Scramble String ....... 2010. 8 Combination sum il17413. 8 Minimum path Sum20510.9 Generate Parentheses17513.9 edit distance20810.10 Sudoku solver17613.10 Decode ways21010.11 Word Search17813. 11 Distinct Subsequences21110.12小结13.12 Word Break.21210.121适用场景...18013.13 Word Break il21310.122思考的步骤.18010.12.3代码模板181第14章图21510.124深搜与回溯法的区别.182141 Clone Graph...21510.12.5深搜与递归的区别182第15章细节实现题218第11章分治法18315. 1 Reverse Integer ........ 21811.1 Pow(x, n)18315.2 Palindrome number21911. 2 Sqrt(x)18415.3 Insert Interval,,,.,.,.,22015.4 Merge Intervals221第12章贪心法18515.5 Minimum Window Substring.. 22212.1 Jump Game18515.6 Multiply strings22412.2 Jump Game II18615.7 Substring with Concatenation12.3 Best Time to Buy and Sell Stock 188of all words22712.4 Best Time to Buy and Sell Stock II 18915.8 Pascals Triangle22812.5 Longest Substring Without Re15.9 Pascals Triangle Il229peating Characters19015.10 Spiral matrix23012.6 Container With Most Water19115.11 Spiral Matrix II231第13章动态规划19215.12 Zig Zag Conversion23313. 1 Triangle19215.13 Divide Two integers23413.2 Maximum Subarray19315. 14 Text Justification23513.3 Palindrome Partitioning II19515.15 Max Points on a line237目录第1章编程技巧在判断两个浮点数a和b是否相等时,不要用a=b,应该判断二者之差的绝对值fabs(a-b)是否小于某个阀值,例如1e-9。判断一个整数是否是为奇数,用x%2!=0,不要用x%2==1,因为ⅹ可能是负数。用char的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到char可能是负数。有的人考虑到了,先强制转型为 unsigned int再用作下标,这仍然是错的。正确的做法是,先强制转型为 unsigned char,再用作下标。这涉及C++整型提升的规则,就不详述了。以下是关于STL使用技巧的,很多条款来自《 Effective stla》这本书。vector和 string优先于动态分配的数组首先,在性能上,由于 vector能够保证连续内存,因此一旦分配了后,它的性能跟原始数组相当其次,如果用new,意味着你要确保后面进行了 delete,一旦忘记了,就会出现BUG且这样需要都写一行 delete,代码不够短;再次,声明多维数组的话,只能一个一个new,例如int** ary new int*row_numfor(int i=0; i< row num; ++1)ary [i] = new int [col_num用 vector的话一行代码搞定,vector<vector<int>>ary(row_ num, vector<int>(col_ num, 0))使用 reserve来避免不必要的重新分配第2章线性表这类题目考察线性表的操作,例如,数组,单链表,双向链表等。2.1数组2.1.1 Remove Duplicates from Sorted array描述Given a sorted array, remove the duplicates in place such that each element appear onlyonce and return the new lenDo not allocate extra space for another array, you must do this in place with constant memFor example, Given input array A=[1, 1, 2Your function should return length= 2, and a is now [1, 2]分析无代码1/ Leet Code, Remove Duplicates from Sorted Array/时间复杂度0(n),空间复杂度0(1)class Solution tpublic:int removeDuplicates(int A[], int n)tif (n==o return oint index = ofor (int i =1:i<n: i++iif (aindex]!=ali])A[++index]=Alireturn index 121数组3代码2//LeetCode, Remove Duplicates from Sorted Array/使用STL,时间复杂度0(n),空间复杂度0(1)class Solution tpublicint removeDuplicates (int A[, int n)treturn distance(A, unique(a, A +n))代码3/ Leet Code, Remove Duplicates from Sorted Array//使用STL,时间复杂度0(n),空间复杂度0(1)class Solution Ipublicint removeDuplicates(int A[l, int n)treturn removeDuplicates(A, A+n,A)-Atemplate<typename InIt, typename OutIt>OutIt removeDuplicates(InIt first, InIt last, OutIt output)twhile (first ! last)[output++first upper_bound (first, last, *firsttput相关题目Remove Duplicates from Sorted Array II,见§2.1.22.1.2 Remove Duplicates from Sorted Array II描述Follow up for"Remove Duplicates": What if duplicates are allowed at most twice?For example, Given sorted array A=[1, 1, 1, 2, 2, 3]Your function should return length= 5, and A is now [1, 1, 2, 2, 34第2章线性表分析加一个变量记录一下元素出现的次数即可。这题因为是已经排序的数组,所以一个变量即可解决。如果是没有排序的数组,则需要引入一个 hashmap来记录出现次数。代码/ Leet Code, Remove Duplicates from Sorted Array II/时间复杂度0(n),空间复杂度0(1)//@authorhex108(https://github.com/hex108)lass Solution fpublic:int removeDuplicates(int A[, int n)tf (n <=2 retnt ind2for (int i =2:i< n: i++)ilf (a[i] ! A lindex -2]A Lindex++]=Ali]return index代码2下面是一个更简洁的版本。上面的代码略长,不过扩展性好一些,例如将 occur<2改为occur<3,就变成了允许重复最多3次/ Leet Code, Remove Duplicates from Sorted Array II7/@author虞航仲(http://weibo.com/u/1666779725)/时间复杂度0(n),空间复杂度0(1)class Solution ipublicint removeDuplicates(int A[], int n)tint index = ofor (int i =0;i<n: ++i)i(i>0&&i<n-1&&A[i]==A[i-1]&&A[i]==A[i+1])ontinueA [index++]=Alireturn index相关题目Remove Duplicates from Sorted Array,见§211
2020-01-03 11:33:59 1.03MB LeetCode题解
1
经典leetcode题解析,标签完整,分类刷题,使用语言C++,很好的刷题参考资料!
2019-12-21 20:33:29 1.08MB c++ leetcode
1
对即将找工作的大学生,研究生都爱刷leetcode的题目,但是刚刚接受无法适从,或是一时半会儿想不到解法,没关系,leetcode题解PDF可一带你慢慢了解思路过程。
目录3.4 Add binary615.1.5 Binary Tree Level Or-3.5 Longest Palindromic Substring. 62der traversal il3.6 Regular Expression Matching665.1.6 Binary Tree Zigzag3.7 Wildcard Matching67Level Order traversal. 963.8 Longest Common Prefix5.1.7 Recover Binary Search3. 9 Valid Number70Tree983.10 Integer to roman725. 1. 8 Same Tree3. 11 Roman to Integer5.1.9 Symmetric Tree1013.12 Count and Say745.1.10 Balanced Binary Tree.. 1023. 13 Anagrams755.1.11 Flatten Binary Tree to3. 14 Simplify Path76Linked List1033. 15 Length of Last Word775.1. 12 Populating Next RightPointers in each node ii 105第4章栈和队列7952二叉树的构建1074.1栈795.2.1 Construct Binary Tree4Valid Parentheses79from Preorder and In4.1.2 Longest valid Parenorder Traversatheses805.2.2 Construct Binary Tree4.1.3 Largest Rectangle infrom Inorder and posHistogram82torder Traversal1084.14 Evaluate reverse pol-53二叉查找树109ish notation845.3. 1 Unique Binary Search4,2队列85Trees5.3.2 Unique Binary Search第5章树86Trees li.1105.1二叉树的遍历865.3.3 Validate Binary Search5.1.1 Binary Tree PreorderTreeTraversal865.3. 4 Convert Sorted array to5.1.2 Binary Tree InorderBinary Search Treel12Traversal885.3.5 Convert Sorted List to5.1. 3 Binary Tree PostorderBinary search tree113Traversal9054二叉树的递归1155. 1. 4 Binary Tree Level Or5.4.1 Minimum Depth of Bider traversalnary lree115目录5.4.2 Maximum Depth of Bi8.32重新实现 next permunary Tree116tation1425.4.3 Path Sum117833递归.1435.4 4 Path Sum il118 8.4 Permutations II1445.4.5 Binary Tree Maximum8.4.1 next permutation... 144Path Suum119842重新实现 next permu5.4.6 Populating Next Righttation144Pointers in each node 12084.3递归1445.4.7 Sum Root to Leaf Num8.5 Combinations146bers122851递归146852迭代147第6章排序1238.6 Letter Combinations of a phone6.1 Merge Sorted Array123umber1476.2 Merge Two Sorted Lists12486.1递归1486.3 Merge k Sorted Lists124862迭代96.4 Insertion Sort List125第9章广度优先搜索1506.5 Sort list1269.1 Word Ladder1506.6 First Missing Positive1279.2 Word Ladder il..1526.7 Sort Colors289. 3 Surrounded regions154第7章查找94小结15613194.1适用场景1567.1 Search for a range131942思考的步骤.1567.2 Search Insert Position.13294.3代码模板1577. 3 Search a 2D Matrix133第10章深度优先搜索162第8章暴力枚举法13510.1 Palindrome Partitioning..1628.1 Subsets13510.2 Unique Paths1658.1.1递归1350.2.1深搜1658.1.2迭代.13710.22备忘录法.1658.2 Subsets il13810.23动规166821递归1381024数学公式167822迭代.14110.3 Unique Paths Il1688. 3 Permutations14210.3.1备忘录法1688.3.1 next permutation14210.3.2动规.169目录10.4 N-Queens16913.4 Maximal rectangle19910.5 N-Queens II17213.5 Best Time to Buy and Sell Stock10.6 Restore ip addresses17320010.7 Combination Sum17413.6 Interleaving String20110.8 Combination Sum Il17513.7 Scramble String20310.9 Generate Parentheses.17713. 8 Minimum Path Sum20810.10 Sudoku solver17813.9 Edit Distance21010.11 Word Search.18013. 10 Decode Ways.21210.12小结18113. 11 Distinct Subsequences21310.12.1适用场景1813. 12 Word Break21410.122思考的步骤18113 13 Word Break il21610.12.3代码模板183第14章图21810.12.4深拽与回溯法的区别.18414. 1 Clone Graph10.12.5深搜与递归的区别..184第15章细节实现题221第11章分治法18515.1 Reverse Integer2211.1 Pow(x, n)18515.2 Palindrome Number222qrt(x18615.3 Insert Interval223第12章贪心法18715.4 Merge Intervals22412.1 Jump game18715.5 Minimum Window Substring.. 22512.2 Jump game Il18815.6 Multiply Strings22712.3 Best Time to buy and sell stock 19015.7 Substring with Concatenation12. 4 Best Time to buy and sell stock 191of all words23012. 5 Longest Substring Without re15.8 Pascal,s Trianglepeating Characters19215.9 Pascals Triangle Il23212. 6 Container with most Water. 19315.10 Spiral matrix23315.11 Spiral matrix II234第13章动态规划19515.12 ZigZag Conversion23613. 1 Triangle19515.13 Divide Two Integers23713.2 Maximum Subarray19615. 14 Text Justification23813.3 Palindrome Partitioning II19815.15 Max Points on a line目录第1章编程技巧在判断两个浮点数a和b是否相等时,不要用a=-b,应该判断二者之差的绝对值fabs(a-b)是否小于某个阈值,例如1e-9。判断一个整数是否是为奇数,用x%2!=0,不要用x%2==1,因为x可能是负数用char的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到char可能是负数。有的人考虑到了,先强制转型为 unsigned int再用作下标,这仍然是错的。正确的做法是,先强制转型为 unsigned char,再用作下标。这涉及C++整型提升的规则,就不详述了。以下是关于STL使用技巧的,很多条款来自《 EffectiⅤ ve StL》这本书。vector和 string优先于动态分配的数组首先,在性能上,由于 vector能够保证连续内存,因此一旦分配了后,它的性能跟原始数组相当其次,如果用new,意味着你要确保后面进行了 delete,一旦忘记了,就会岀现BUG,且这样需要都写一行 delete,代码不够短再次,声明多维数组的话,只能一个一个new,例如:int** ary = new int*[row_num];for(int i=0: i< row num; ++1)ary [i] new int [col_num]用 vector的话一行代码搞定,vector<vector<int>>ary(row_num, vector<int>(col_num, 0))使用 reserve来避免不必要的重新分配第2章线性表这类题目考察线性表的操作,例如,数组,单链表,双向链表等。21数组2.1.1 Remove Duplicates from Sorted array描述Given a sorted array, remove the duplicates in place such that each element appear only onceand return the new lengthDo not allocate extra space for another array, you must do this in place with constant memoryFor example, Given input array A =[1, 1, 2Your function should return length=2, and a is now [1, 2]分析无代码1/ LeetCode, Remove Duplicates from Sorted Array/时间复杂度0(n),空间复杂度0(1)class Solution tublicint removeDuplicates(int A[], int n)tlf (n==o return oint index =0:for (int i =1:i <n: i++iif (Alindex ! alidA[++index]= Alireturn index 12.1数组代码2// Leet Code, Remove Duplicates from Sorted Array//使用STL,时间复杂度0(n),空间复杂度0(1)class Solution ipublicint removeDuplicates(int A[, int n)treturn distance(A, unique(A, A n))代码3/ LeetCode, Remove Duplicates from Sorted Array/使用STL,时间复杂度0(n),空间复杂度0(1)lass Solution fublicint removeDuplicates (int A[], int n)treturn removeDuplicates(A, A +n, A)-A;template<typename InIt, typename outit>OutIt removeDuplicates(InIt first, InIt last, OutIt output)thile (first last)i*output++ = *firstfirst upper_bound(first, last, *firstreturn output相关题目Remove duplicates from Sorted Array Il,见§2.1.22.1.2 Remove Duplicates from Sorted Array II描述Follow up for"Remove Duplicates " What if duplicates are allowed at most twice?For example, Given sorted array a =[1, 1, 1, 2, 2, 3]Your function should return length=5, and A is now [1, 1, 2, 2, 3分析加一个变量记录一下元素出现的次数即可。这题因为是已经排序的数组,所以一个变量即可解决。如果是没有排序的数组,则需要引入一个 hashmap来记录出现次数4第2章线性表代码1// Leet Code, Remove Duplicates from Sorted Array II/时间复杂度0(n),空间复杂度0(1)//qauthorhex108(https://github.com/hex108)class Solution tublicint removeDuplicates (int A[], int n)tlf (n <=2 return nint index =2for (int i=2: i n: 1++)if (all] ! Alindex -2])A Lindex++]= Ali]return index;代码2下面是一个更简洁的版本。上面的代码略长,不过扩展性好一些,例如将 occur<2改为ocur<3,就变成了允许重复最多3次。//LeetCode, Remove Duplicates from Sorted Array II//@author虞航仲(http://weibo.com/u/1666779725)//时间复杂度0(n),空间复杂度0(1)class Solution ipublicint removeDuplicates(int A[], int n)tmt index = ofor (intif(i>0&&i<1&&A[i]==A[i-1]&&A[i]==A[i+1])continueA lindex++]=Alireturn index;相关题目Remove Duplicates from Sorted Array,见§2.1.12.1.3 Search in Rotated Sorted Array描述Suppose a sorted array is rotated at some pivot unknown to you beforehand
2019-12-21 19:42:05 1.03MB leetcode题解
1
最新版本的leetcode题解,包含目前leetcode网站上几乎所有题目的代码解析,对刷算法题库有很大帮助。
目录3.4 Add binary605.1.5 Binary Tree Level Or-3.5 Longest Palindromic Substring. 61der traversal il933.6 Regular Expression Matching655.1.6 Binary Tree Zigzag3.7 Wildcard MatchingLevel Order traversal. 953.8 Longest Common Prefix685.1.7 Recover Binary Search3. 9 Valid Number69Tree973.10 Integer to roman715.1. 8 Same tree3. 11 Roman to Integer2乃5.1.9 Symmetric Tree1003.12 Count and Say5.1.10 Balanced Binary Tree.. 1013. 13 Anagrams..745.1.11 Flatten Binary Tree to3. 14 Simplify PathLinked List1023. 15 Length of Last Word765.1. 12 Populating Next RightPointers in each node ii 104第4章栈和队列7852二叉树的构建1064.1栈785.2.1 Construct Binary Tree4Valid Parentheses78from Preorder and In4.1.2 Longest valid Parenorder traversa106theses75.2.2 Construct Binary Tree4.1.3 Largest Rectangle infrom Inorder and posHistogram8torder Traversal1074.14 Evaluate reverse pol-53二叉查找树108ish notation835.3. 1 Unique Binary Search4,2队列84Trees1085.3.2 Unique Binary Search第5章树855.1二叉树的遍历855.3.3 Validate Binary Search5.1.1 Binary Tree PreorderTreeTraversal855.3.4 Convert Sorted array to5.1.2 Binary Tree InorderBinary Search TreeTraversal875.3.5 Convert Sorted List to5.1. 3 Binary Tree PostorderBinary search tree11Traversal8954二叉树的递归.1145. 1. 4 Binary Tree Level Or5.4.1 Minimum Depth of Bider traversal)2nary lree.114目录5.4.2 Maximum Depth of Bi8.32重新实现 next permunary Tree115tation1415.4.3 Path Sum116833递归.1425.4 4 Path Sum il1178.4 Permutations li1435.4.5 Binary Tree Maximum8.4.1 next permutation(... 143Path Suum118842重新实现 next permu5.4.6 Populating Next Righttation143Pointers in Each Node. 11984.3递归1435.4.7 Sum Root to Leaf Num8.5 Combinations145bers21851递归145852迭代146第6章排序1228.6 Letter Combinations of a phone6.1 Merge Sorted Array122umber1466.2 Merge Two Sorted Lists..... 12386.1递归1476.3 Merge k Sorted Lists123862迭代1486.4 Insertion Sort List124第9章广度优先搜索1496.5 Sort list1259.1 Word Ladder.1496.6 First Missing Positive1269.2 Word Ladder il1516.7 Sort Colors1279. 3 Surrounded regions153第7章查找94小结15513094.1适用场景1557.1 Search for a range130942思考的步骤1557.2 Search Insert Position.13194.3代码模板1567. 3 Search a 2D Matrix132第10章深度优先搜索161第8章暴力枚举法13410.1 Palindrome Partitioning..1618.1 Subsets13410.2 Unique Paths1648.1.1递归13410.2.1深搜1648.1.2迭代13610.22备忘录法.1648.2 Subsets il13710.23动规165821递归1371024数学公式166822迭代.14010.3 Unique Paths Il1678. 3 Permutations1410.3.1备忘录法1678.3.1 next permutation14110.3.2动规.168目录10.4 N-Queens16813.4 Maximal rectangle19810.5 N-Queens II17113.5 Best Time to Buy and Sell Stock10.6 Restore ip addresses172.19910.7 Combination Sum17313.6 Interleaving String10.8 Combination Sum Il17413.7 Scramble String20210.9 Generate Parentheses.17613. 8 Minimum Path Sum20710.10 Sudoku solver17713.9 Edit Distance20910.11 Word Search.17913. 10 Decode Ways.21110.12小结18013. 11 Distinct Subsequences21210.12.1适用场景18013. 12 Word Break21310.122思考的步骤18013 13 Word Break il21510.12.3代码模板182第14章图21710.12.4深拽与回溯法的区别.18314. 1 Clone Graph21710.12.5深搜与递归的区别..183第15章细节实现题220第11章分治法18415.1 Reverse Integer2201.1 Pow(x, n).18415.2 Palindrome Number.22111. 2 Sqrt(x)18515.3 Insert Interval222第12章贪心法18615.4 Merge Intervals22312.1 Jump game18615.5 Minimum Window Substring.. 22412.2 Jump game Il18715.6 Multiply Strings22612.3 Best Time to buy and sell stock 18915.7 Substring with Concatenation12. 4 Best Time to buy and sell stock l190of all words12. 5 Longest Substring Without re15.8 Pascal,s Triangle230peating Characters1915.9 Pascals Triangle Il23112.6 Container With Most Water.. 192 15.10 Spiral Matrix23215.11 Spiral matrix II233第13章动态规划19415.12 ZigZag Conversion23513. 1 Triangle19415.13 Divide Two Integers23613.2 Maximum Subarray19515. 14 Text Justification23713.3 Palindrome Partitioning II19715.15 Max Points on a line239目录第1章编程技巧在判断两个浮点数a和b是否相等时,不要用a=-b,应该判断二者之差的绝对值fabs(a-b)是否小于某个阀值,例如1e-9。判断一个整数是否是为奇数,用x%2!=0,不要用x%2==1,因为x可能是负数。用char的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到char可能是负数。有的人考虑到了,先强制转型为 unsigned int再用作下标,这仍然是错的。正确的做法是,先强制转型为 unsigned char,再用作下标。这涉及C++整型提升的规则,就不详述了。以下是关于STL使用技巧的,很多条款来自《 EffectiⅤ ve StL》这本书。vector和 string优先于动态分配的数组首先,在性能上,由于 vector能够保证连续内存,因此一旦分配了后,它的性能跟原始数组相当其次,如果用new,意味着你要确保后面进行了 delete,旦忘记了,就会出现BUG,且这样需要都写一行 delete,代码不够短再次,声明多维数组的话,只能一个一个new,例如:int** ary = new int*[row_num];for(int i=0: i< row num; ++1)ary [i] new int [col_num]用 vector的话一行代码搞定,vector<vector<int>>ary(row_num, vector<int>(col_num, 0))使用 reserve来避免不必要的重新分配第2章线性表这类题目考察线性表的操作,例如,数组,单链表,双向链表等。21数组2.1.1 Remove Duplicates from Sorted array描述Given a sorted array, remove the duplicates in place such that each element appear only onceand return the new lengthDo not allocate extra space for another array, you must do this in place with constant memoryFor example, Given input array A =[1, 1, 2Your function should return length=2, and a is now [1, 2]分析无代码1/ LeetCode, Remove Duplicates from Sorted Array/时间复杂度0(n),空间复杂度0(1)class Solution tublicint removeDuplicates(int A[], int n)tlf (n==o return oint index =0:for (int i =1:i <n: i++iif (Alindex ! alidA[++index]= Alireturn index 12.1数组代码2// Leet Code, Remove Duplicates from Sorted Array//使用STL,时间复杂度0(n),空间复杂度0(1)class Solution ipublicint removeDuplicates(int A[, int n)treturn distance(A, unique(A, A n))代码3/ LeetCode, Remove Duplicates from Sorted Array/使用STL,时间复杂度0(n),空间复杂度0(1)lass Solution fublicint removeDuplicates (int A[], int n)treturn removeDuplicates(A, A +n, A)-A;template<typename InIt, typename outit>OutIt removeDuplicates(InIt first, InIt last, OutIt output)thile (first last)i*output++ = *firstfirst upper_bound(first, last, *firstreturn output相关题目Remove duplicates from Sorted Array Il,见§2.1.22.1.2 Remove Duplicates from Sorted Array II描述Follow up for"Remove Duplicates " What if duplicates are allowed at most twice?For example, Given sorted array a =[1, 1, 1, 2, 2, 3]Your function should return length=5, and A is now [1, 1, 2, 2, 3分析加一个变量记录一下元素出现的次数即可。这题因为是已经排序的数组,所以一个变量即可解决。如果是没有排序的数组,则需要引入一个 hashmap来记录出现次数4第2章线性表代码1// Leet Code, Remove Duplicates from Sorted Array II/时间复杂度0(n),空间复杂度0(1)//qauthorhex108(https://github.com/hex108)class Solution tublicint removeDuplicates (int A[], int n)tlf (n <=2 return nint index =2for (int i=2: i n: 1++)if (all] ! Alindex -2])A Lindex++]= Ali]return index;代码2下面是一个更简洁的版本。上面的代码略长,不过扩展性好一些,例如将 occur<2改为ocur<3,就变成了允许重复最多3次。//LeetCode, Remove Duplicates from Sorted Array II//@author虞航仲(http://weibo.com/u/1666779725)//时间复杂度0(n),空间复杂度0(1)class Solution ipublicint removeDuplicates(int A[, int n)tmt index = ofor (intif(i>0&&i<1&&A[i]==A[i-1]&&A[i]==A[i+1])continueA lindex++]=Alireturn index;相关题目Remove Duplicates from Sorted Array,见§2.1.12.1.3 Search in Rotated Sorted Array描述Suppose a sorted array is rotated at some pivot unknown to you beforehand
2015-11-22 00:00:00 1.36MB leetcode 算法 程序 题解
1