实验目的:通过实验理解算法的概念、算法的表示、算法的时间复杂度和空间复杂度分析;
运用熟悉的编程工具对码头扩建问题进行求解,初步学会分析算法的时间复杂度某市有一码头,每次仅容一辆船停泊装卸货,由于经常有船等候进港,部分人提出要扩建码头。
经过调查历史资料发现,码头平均每月停船24艘,每艘船的停泊时间为24±20小时,相邻两艘船的到达时间间隔为30±15小时,如果一艘船因有船在港而等候1小时,其消耗成本为1000元。
经预算,扩建码头大约需要1350万元,故市长决策如下:如果未来五年内停泊船只因等候的成本消耗总和超过扩建码头花费则扩建码头,否则,不予扩建。
因此,希望你能够帮助市长做出决策。
此问题已知到达的大概时间和大概停泊时间,对于此问题用概率统计的方法来做比较复杂,可用程序随机产生到达时间和停泊时间来模拟未来五年内船的停泊,多次模拟预测停泊情况,以做出决策;
3.实验要求:编制程序并对其时间复杂度和空间复杂度进行分析;
1
对即将找工作的大学生,研究生都爱刷leetcode的题目,但是刚刚接受无法适从,或是一时半会儿想不到解法,没关系,leetcode题解PDF可一带你慢慢了解思路过程。
目录3.4Addbinary615.1.5BinaryTreeLevelOr-3.5LongestPalindromicSubstring.62dertraversalil3.6RegularExpressionMatching665.1.6BinaryTreeZigzag3.7WildcardMatching67LevelOrdertraversal.963.8LongestCommonPrefix5.1.7RecoverBinarySearch3.9ValidNumber70Tree983.10Integertoroman725.1.8SameTree3.11RomantoInteger5.1.9SymmetricTree1013.12CountandSay745.1.10BalancedBinaryTree..1023.13Anagrams755.1.11FlattenBinaryTreeto3.14SimplifyPath76LinkedList1033.15LengthofLastWord775.1.12PopulatingNextRightPointersineachnodeii105第4章栈和队列7952二叉树的构建1074.1栈795.2.1ConstructBinaryTree4ValidParentheses79fromPreorderandIn4.1.2LongestvalidParenorderTraversatheses805.2.2ConstructBinaryTree4.1.3LargestRectangleinfromInorderandposHistogram82torderTraversal1084.14Evaluatereversepol-53二叉查找树109ishnotation845.3.1UniqueBinarySearch4,2队列85Trees5.3.2UniqueBinarySearch第5章树86Treesli.1105.1二叉树的遍历865.3.3ValidateBinarySearch5.1.1BinaryTreePreorderTreeTraversal865.3.4ConvertSortedarrayto5.1.2BinaryTreeInorderBinarySearchTreel12Traversal885.3.5ConvertSortedListto5.1.3BinaryTreePostorderBinarysearchtree113Traversal9054二叉树的递归1155.1.4BinaryTreeLevelOr5.4.1MinimumDepthofBidertraversalnarylree115目录5.4.2MaximumDepthofBi8.32重新实现nextpermunaryTree116tation1425.4.3PathSum117833递归.1435.44PathSumil1188.4PermutationsII1445.4.5BinaryTreeMaximum8.4.1nextpermutation...144PathSuum119842重新实现nextpermu5.4.6PopulatingNextRighttation144Pointersineachnode12084.3递归1445.4.7SumRoottoLeafNum8.5Combinations146bers122851递归146852迭代147第6章排序1238.6LetterCombinationsofaphone6.1MergeSortedArray123umber1476.2MergeTwoSortedLists12486.1递归1486.3MergekSortedLists124862迭代96.4InsertionSortList125第9章广度优先搜索1506.5Sortlist1269.1WordLadder1506.6FirstMissingPositive1279.2WordLadderil..1526.7SortColors289.3Surroundedregions154第7章查找94小结15613194.1适用场景1567.1Searchforarange131942思考的步骤.1567.2SearchInsertPosition.13294.3代码模板1577.3Searcha2DMatrix133第10章深度优先搜索162第8章暴力枚举法13510.1PalindromePartitioning..1628.1Subsets13510.2UniquePaths1658.1.1递归1350.2.1深搜1658.1.2迭代.13710.22备忘录法.1658.2Subsetsil13810.23动规166821递归1381024数学公式167822迭代.14110.3UniquePathsIl1688.3Permutations14210.3.1备忘录法1688.3.1nextpermutation14210.3.2动规.169目录10.4N-Queens16913.4Maximalrectangle19910.5N-QueensII17213.5BestTimetoBuyandSellStock10.6Restoreipaddresses17320010.7CombinationSum17413.6InterleavingString20110.8CombinationSumIl17513.7ScrambleString20310.9GenerateParentheses.17713.8MinimumPathSum20810.10Sudokusolver17813.9EditDistance21010.11WordSearch.18013.10DecodeWays.21210.12小结18113.11DistinctSubsequences21310.12.1适用场景1813.12WordBreak21410.122思考的步骤1811313WordBreakil21610.12.3代码模板183第14章图21810.12.4深拽与回溯法的区别.18414.1CloneGraph10.12.5深搜与递归的区别..184第15章细节实现题221第11章分治法18515.1ReverseInteger2211.1Pow(x,n)18515.2PalindromeNumber222qrt(x18615.3InsertInterval223第12章贪心法18715.4MergeIntervals22412.1Jumpgame18715.5MinimumWindowSubstring..22512.2JumpgameIl18815.6MultiplyStrings22712.3BestTimetobuyandsellstock19015.7SubstringwithConcatenation12.4BestTimetobuyandsellstock191ofallwords23012.5LongestSubstringWithoutre15.8Pascal,sTrianglepeatingCharacters19215.9PascalsTriangleIl23212.6ContainerwithmostWater.19315.10Spiralmatrix23315.11SpiralmatrixII234第13章动态规划19515.12ZigZagConversion23613.1Triangle19515.13DivideTwoIntegers23713.2MaximumSubarray19615.14TextJustification23813.3PalindromePartitioningII19815.15MaxPointsonaline目录第1章编程技巧在判断两个浮点数a和b是否相等时,不要用a=-b,应该判断二者之差的绝对值fabs(a-b)是否小于某个阈值,例如1e-9。
判断一个整数是否是为奇数,用x%2!=0,不要用x%2==1,因为x可能是负数用char的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到char可能是负数。
有的人考虑到了,先强制转型为unsignedint再用作下标,这仍然是错的。
正确的做法是,先强制转型为unsignedchar,再用作下标。
这涉及C++整型提升的规则,就不详述了。
以下是关于STL使用技巧的,很多条款来自《EffectiⅤveStL》这本书。
vector和string优先于动态分配的数组首先,在性能上,由于vector能够保证连续内存,因此一旦分配了后,它的性能跟原始数组相当其次,如果用new,意味着你要确保后面进行了delete,一旦忘记了,就会岀现BUG,且这样需要都写一行delete,代码不够短再次,声明多维数组的话,只能一个一个new,例如:int**ary=newint*[row_num];for(inti=0:i<rownum;++1)ary[i]newint[col_num]用vector的话一行代码搞定,vector<vector<int>>ary(row_num,vector<int>(col_num,0))使用reserve来避免不必要的重新分配第2章线性表这类题目考察线性表的操作,例如,数组,单链表,双向链表等。
21数组2.1.1RemoveDuplicatesfromSortedarray描述Givenasortedarray,removetheduplicatesinplacesuchthateachelementappearonlyonceandreturnthenewlengthDonotallocateextraspaceforanotherarray,youmustdothisinplacewithconstantmemoryForexample,GiveninputarrayA=[1,1,2Yourfunctionshouldreturnlength=2,andaisnow[1,2]分析无代码1/LeetCode,RemoveDuplicatesfromSortedArray/时间复杂度0(n),空间复杂度0(1)classSolutiontublicintremoveDuplicates(intA[],intn)tlf(n==oreturnointindex=0:for(inti=1:i<n:i++iif(Alindex!alidA[++index]=Alireturnindex12.1数组代码2//LeetCode,RemoveDuplicatesfromSortedArray//使用STL,时间复杂度0(n),空间复杂度0(1)classSolutionipublicintremoveDuplicates(intA[,intn)treturndistance(A,unique(A,An))代码3/LeetCode,RemoveDuplicatesfromSortedArray/使用STL,时间复杂度0(n),空间复杂度0(1)lassSolutionfublicintremoveDuplicates(intA[],intn)treturnremoveDuplicates(A,A+n,A)-A;template<typenameInIt,typenameoutit>OutItremoveDuplicates(InItfirst,InItlast,OutItoutput)thile(firstlast)i*output++=*firstfirstupper_bound(first,last,*firstreturnoutput相关题目RemoveduplicatesfromSortedArrayIl,见§2.1.22.1.2RemoveDuplicatesfromSortedArrayII描述Followupfor"RemoveDuplicates"Whatifduplicatesareallowedatmosttwice?Forexample,Givensortedarraya=[1,1,1,2,2,3]Yourfunctionshouldreturnlength=5,andAisnow[1,1,2,2,3分析加一个变量记录一下元素出现的次数即可。
这题因为是已经排序的数组,所以一个变量即可解决。
如果是没有排序的数组,则需要引入一个hashmap来记录出现次数4第2章线性表代码1//LeetCode,RemoveDuplicatesfromSortedArrayII/时间复杂度0(n),空间复杂度0(1)//qauthorhex108(https://github.com/hex108)classSolutiontublicintremoveDuplicates(intA[],intn)tlf(n<=2returnnintindex=2for(inti=2:in:1++)if(all]!Alindex-2])ALindex++]=Ali]returnindex;代码2下面是一个更简洁的版本。
上面的代码略长,不过扩展性好一些,例如将occur<2改为ocur<3,就变成了允许重复最多3次。
//LeetCode,RemoveDuplicatesfromSortedArrayII//@author虞航仲(http://weibo.com/u/1666779725)//时间复杂度0(n),空间复杂度0(1)classSolutionipublicintremoveDuplicates(intA[],intn)tmtindex=ofor(intif(i>0&&i<1&&A[i]==A[i-1]&&A[i]==A[i+1])continueAlindex++]=Alireturnindex;相关题目RemoveDuplicatesfromSortedArray,见§2.1.12.1.3SearchinRotatedSortedArray描述Supposeasortedarrayisrotatedatsomepivotunknowntoyoubeforehand
2024/12/7 0:08:16 1.03MB leetcode题解
1
向我展示数据结构使用高级数据结构(链接列表,队列,树,递归函数...)解决六个编程任务这些编程挑战是UDACITY第二个项目的。
问题涵盖了与本课程中学习的数据结构相关的各种主题。
目的是考虑到代码的效率和设计选择,以Python编写干净有效的解决方案。
该代码应有充分的解释,优雅且易于阅读。
内容问题1:最近最少使用的缓存设计选择:我对存储的项目使用字典,因为它为获取/设置/删除操作提供了复杂度O(1)。
更准确地说,我使用orderedDict()结构来跟踪使用顺序。
orderedDict()可用作队列来管理最不常用的密钥。
dict()随着每个操作而更新,因此表现为队列结构。
时间复杂度:所有操作都有固定的时间。
空间复杂度:通过查看字典的长度来管理最大容量。
空间复杂度为O(capacity),它等效于O(1),因为它与执行的操作数无关。
问题2:查找文件设计
2024/11/2 15:22:25 40KB python linked-list stack blockchain
1
排序作业选择题(每题2分,共22分)。
1.若表R在排序前已按键值递增顺序排列,则(  )算法的比较次数最少。
A.直接插入排序           B.快速排序     C.归并排序               D.选择排序2.对各种内部排序方法来说,(  )。
A.快速排序时间性能最佳                           B.归并排序是稳定的排序方法C.快速排序是一种选择排序                        D.堆排序所用的辅助空间比较大3. 排序算法的稳定性是指(  )。
A.经过排序之后,能使值相同的数据保持原顺序中的相对位置不变。
B.经过排序之后,能使值相同的数据保持原顺序中的绝对位置不变。
C.排序算法的性能与被排序元素的数量关系不大D.排序算法的性能与被排序元素的数量关系密切4.如下序列中,(  )序列是大顶堆。
A. {4,5,3,2,1}              B. {5,3,4,1,2}       C. {1,2,3,4,5}              D. {1,2,3,5,4}5.若将{3,2,5,4,1}排为升序,则实施快速排序一趟后的结果是(  )(其中,枢轴记录取首记录)。
A. {1,2,3,4,5}                 B. {1,2,4,5,3}       C. {1,3,5,4,2}                 D. {2,5,4,1,3}.若将{1,2,3,4,5,6,7,9,8}排为升序,则(  )排序方法的“比较记录”次数最少。
A. 快速排序                  B. 简单选择排序    C. 直接插入排序              D. 冒泡排序7.若将{5,4,3,2,1}排为升序,则(  )排序方法的“移动记录”次数最多。
A. 快速排序                               B. 冒泡排序C. 直接插入排序                      D. 简单选择排序8.用简单选择排序将顺序表{2,3,1,3′,2′}排为升序,实施排序1趟后结果是{1,3,2,3′,2′},则排序3趟后的结果是(  )。
A. {1,2,3,3′,2′}                      B. {1,2,2′,3,3′}C. {1,2′,2,3,3′}                     D. {1,2,2′,3′,3}9.下列排序算法中,(   )排序在某趟结束后不一定选出一个元素放到其最终的位置上。
A.选择            B.冒泡          C.归并          D.堆10.下列排序算法中,稳定的排序算法是( )。
A.堆排序               B.直接插入排序  C.快速排序             D.希尔排序11.堆排序的时间复杂度是(   )。
A.O(n*n)                B.O(n*logn)      C.O(n)                  D.O(logn)填空题(每空4分,共4分)。
对n个元素进行归并排序,空间复杂度为        。
综合题(共24分)。
1.(共12分)有一组待排序的关键字如下:(54,38,96,23,15,72,60,45,83)分别写出希尔排序(d=5)、快速排序、堆排序、归并排序第一趟升序排序后的结果(其中堆排序的第一趟指序列完成初始建堆、将堆顶元素置为最末位置后其余元素调整为堆的结果)(每个3分)。
希尔排序:  快速排序:堆排序:归并排序: 2.(共12分)已知数据序列为(12,5,9,20,6,31,24),对该项数据序列进行排序,分别写出直接插入排序、简单选择排序、快速排序、堆排序、二路归并排序及基数排序第一趟升序排序结果(其中堆排序的第一趟指序列完成初始建堆、将堆顶元素置为最末位置后其余元素调整为堆的结果)(每个2分)。
直接插入排序:简单选择排序:快速排序:堆排序:二路归并排序:基数排序:
2024/5/3 7:27:51 15KB 排序作业 数据结构
1
实验三栈和队列3.1实验目的:(1) 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;
(2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。
3.2 实验要求:(1) 复习课本中有关栈和队列的知识;
(2) 用C语言完成算法和程序设计并上机调试通过;
(3) 撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。
2023/11/12 23:07:01 136KB 栈和队列 实验报告
1
习1-8什么是算法?怎样描述算法?怎样衡量算法的性能?【答】算法是对问题求解过程的一种描述,是为解决一类问题给出的一个确定的、有限长的操作序列。
算法特征包括:有穷性、确定性、输入、输出和可行性。
可以采用自然语言或伪码描述算法的设计思想,采用程序设计语言实现算法。
采用渐进分析法衡量算法性能,用时间复杂度O(f(n))表示所花费时间的量级,即时间效率;
用空间复杂度O(S(n))表示算法执行过程中所需要的额外空间。
2023/9/17 16:21:27 12.47MB 数据结构java 第四版
1
对于给定的n个正整数,设计一个优先队列式分支限界法用最少的无优先级运算次数产生整数m用文字来描述你的算法思路,包括解空间、限界函数、算法次要步骤等。
在Windows环境下使用C/C++语言编程实现算法。
记录运行结果,包括输入数据,问题解答及运行时间。
分析算法最坏情况下时间复杂度和空间复杂度。
2018/11/11 20:41:37 150KB C语言
1
共30个视频教程。
包括量化框架,均值和回归理论,空间复杂度,羊驼买卖,鳄鱼买卖等
2017/11/26 14:42:05 116B python 金融
1
LeetCodecpp最新中文题解.pdfLeetCodecpp最新中文题解.pdfLeetCodecpp最新中文题解.pdf目录3.4Addbinary615.1.5BinaryTreeLevelOr-3.5LongestPalindromicSubstring.62dertraversalil3.6RegularExpressionMatching665.1.6BinaryTreeZigzag3.7WildcardMatching67LevelOrdertraversal.963.8LongestCommonPrefix5.1.7RecoverBinarySearch3.9ValidNumber70Tree983.10Integertoroman725.1.8SameTree3.11RomantoInteger735.1.9SymmetricTree1003.12CountandSay745.1.10BalancedBinaryTree..1023.13Anagrams755.1.11FlattenBinaryTreeto3.14SimplifyPath76LinkedList1033.15LengthofLastWord775.1.12PopulatingNextRightPointersineachnodeii105第4章栈和队列7952二叉树的构建10641栈795.2.1ConstructBinaryTree4ValidParentheses79fromPreorderandIn4.1.2LongestvalidParenorderTraversa106theses805.2.2ConstructBinaryTree4.1.3LargestRectangleinfromInorderandposHistogram82torderTraversal1074.1.4Evaluatereversepol-53二叉查找树108ishnotation845.3.1UniqueBinarySearch4.2队列85Trees.1085.3.2UniqueBinarySearch第5章树86Treesli.1105.1二叉树的遍历865.3.3ValidateBinarySearch5.1.1BinaryTreePreorderTreeTraversal865.3.4ConvertSortedarrayto5.1.2BinaryTreeInorderBinarySearchTree...112Traversal885.3.5ConvertSortedListto5.1.3BinaryTreePostorderBinarySearchTree113Traversal9054二叉树的递归.1145.1.4BinaryTreeLevelOr5.4.1MinimumDepthofBidertraversal)2narylree115目录5.4.2MaximumDepthofBi8.3.,2重新实现nextpermunaryTree116tation1425.4.3PathSum11783.3递归.1435.44PathSumil1188.4PermutationsII1445.4.5BinaryTreeMaximum8.4.1nextpermutation...144PathSuum11984.2重新实现nextpermu5.4.6PopulatingNextRighttation144Pointersineachnode120843递归1445.4.7SumRoottoLeafnum8.5Combinations146bers2185.1递归1468.5.2迭代147第6章排序1238.6LetterCombinationsofaphone6.1MergeSortedArray123umber1476.2MergeTwoSortedLists12486.1递归1486.3MergekSortedLists124862迭代96.4InsertionSortList125第9章广度优先搜索1506.5Sortlist1269.1WordLadder1506.6FirstMissingPositive1279.2WordLadderil1546.7SortColors1289.3Surroundedregions162第7章查找94小结16413194.l适用场景1647.1Searchforarange131942思考的步骤7.2SearchInsertPosition.13294.3代码模板1657.3Searcha2DMatrix133第10章深度优先搜索173第8章暴力枚举法13510.1PalindromePartitioning1738.1Subsets13510.2UniquePaths1768.1.1递归1350.2.1深搜1768.1.2迭代.1371022备忘录法.1768.2Subsetsil13810.23动规177821递归13810.24数学公式1788.2.2迭代.14110.3UniquePathsIl1798.3Permutations14210.3.1备忘录法1798.3.1nextpermutation14210.3.2动规.180目录10.4N-Queens1813.4Maximalrectangle21310.5N-QueensII18413.5BestTimetoBuyandSellStock10.6Restoreipaddresses186.21410.7CombinationSum18813.6InterleavingString21510.8CombinationSumIl18913.7ScrambleString21710.9GenerateParentheses.19013.8MinimumPathSum.22210.10Sudokusolver19213.9EditDistance22410.11WordSearch.19313.10DecodeWays.22610.12小结19513.11Distinctsub22710.12.1适用场景19513.12WordBreak22810.122思考的步骤1951313WordBreakil2300.12.3代码模板197第14章图23210.12.4深搜与回溯法的区別.19714.1CloneGraph23210.12.5深搜与递归的区别..197第15章细节实现题235第11章分治法19915.1ReverseInteger2351.1Pow(x,n)19915.2PalindromeNumber.23611.2Sqrt(x)20015.3InsertInterval237第12章贪心法20115.4MergeIntervals23812.1Jumpgame20115.5MinimumWindowSubstring23912.2JumpgameII15.6MultiplyStrings24112.3BestTimetobuyandSellstock20415.7SubstringwithConcatenation12.4BestTimetobuyandsellstockl205ofallwords24412.5LongestSubstringWithoutre15.8Pascal,sTriangle245peatingCharacters20615.9PascalsTriangleIl24612.6ContainerwithMostWater..20715.10SpiralMatrix24715.11SpiralmatrixII248第13章动态规划20915.12ZigZagConversion25013.1Triangle20915.13DivideTwoIntegers25113.2MaximumSubarray15.14TextJustification25313.3PalindromePartitioningII1215.15MaxPointsonaline255目录第1章编程技巧在判断两个浮点数a和b是否相等时,不要用a==b,应该判断二者之差的绝对值fabs(a-b)是否小于某个阈值,例如1e-9。
判断一个整数是否是为奇数,用x%2!=0,不要用x%2=1,因为ⅹ可能是负用char的值作为数组下标(例如,统计字符串中每个字符岀现的次数),要考虑到char可能是负数。
有的人考虑到了,先强制转型为unsignedint再用作下标,这仍然是错的。
正确的做法是,先强制转型为unsignedchar,再用作下标。
这涉及C十整型提升的规则,就不详述了。
以下是关于STL使用技巧的,很多条款来自《EffectiveSTL》这本书。
vector和string优先于动态分配的数组首先,在功能上,由于vector能够保证连续内存,因此一旦分配了后,它的功能跟原始数组相当;其次,如果用new,意味着你要确保后面进行孓delete,一旦忘记了,就会出现BUG,且这样需要都写一行delete,代码不够短再次,声明多维数组的话,只能一个一个new,例如int**ary=newint*[row_num];for(inti=0:i<rownum;++1)ary[i]newint[col_num]用vector的话一行代码搞定vector<vector<int>>ary(row_num,vector<int>(col_num,0))使用reserve来避免不必要的重新分配第2章线性表这类题目考察线性表的操作,例如,数组,单链表,双向链表等。
2数组2.1.1RemoveDuplicatesfromSortedarray描述Givenasortedarray,removetheduplicatesinplacesuchthateachelementappearonlyonceandreturnthenewlengthDonotallocateextraspaceforanotherarray,youmustdothisinplacewithconstantmemoryForexample,GiveninputarrayA=[1,1,2Yourfunctionshouldreturnlength=2,andaisnow[1,2]分析无代码1/LeetCode,RemoveDuplicatesfromSortedArray//时间复杂度0(n),空间复杂度0(1)classSolutiontublicintremoveDuplicates(vector<int>&nums)tif(numsemptyo)return0;intindex=ofor(inti=1:inumssize:1++iif(nums[index]!nums[i])nums[++index]=nums[i]returnindex12.1数组代码2//LeetCode,RemoveDuplicatesfromSortedArray/使用STL,时间复杂度0(n),空间复杂度0(1)classSolutionipublicintremoveDuplicates(vector<int>&nums)treturndistance(numsbegin(),unique(numsbegin(),numsend())代码3/LeetCode,RemoveDuplicatesfromSortedArray/使用STL,时间复杂度0(n),空间复杂度0(1)lassSolutionfublicintremoveDuplicates(vector<int>&nums)treturndistance(numsbegin(,removeDuplicates(numsbegin(,numsend(),numsbegintemplate<typenameInIt,typenameoutit>OutItremoveDuplicates(InItfirst,InItlast,OutItoutput)thile(firstlast)i*output++=*firstfirstupper_bound(first,last,*firstreturnoutput相关题目RemoveDuplicatesfromSortedArrayI,见§2.1.22.1.2RemoveDuplicatesfromSortedArrayII描述Followupfor"RemoveDuplicates"Whatifduplicatesareallowedatmosttwice?Forexample,Givensortedarraya=[1,1,1,2,2,3]Yourfunctionshouldreturnlength=5,andAisnow[1,1,2,2,3分析加一个变量记录一下元素出现的次数即可。
这题因为是已经排序的数组,所以一个变量即可解决。
如果是没有排序的数组,则需要引入一个hashmap来记录出现次数。
4第2章线性表代码1//LeetCode,RemoveDuplicatesfromSortedArrayII//时间复杂度0(n),空间复杂度0(1)//qauthorhex108(https://github.com/hex108)classSolutiontublicintremoveDuplicates(vector<int>&nums)tif(numssize(<=2)returnnumssizeintindex=2for(inti=2:inumssize(:i++)ff(nums[i]!numslindex-2]nums[index++]=nums[i]returnindex;代码2下面是一个更简洁的版本。
上面的代码略长,不过扩展性好一些,例如将occur<2改为occur3,就变成了允许重复最多3次。
//LeetCode,RemoveDuplicatesfromSortedArrayII7/@author虞航仲(http://weibo.com/u/1666779725)//时间复杂度0(n),空间复杂度0(1)lassSolutionfpublicintremoveDuplicates(vector<int>&nums)tconstintn=numssizeintindex=0:for(inti=0:i<n;++i)if(i>0&&i<n-1&nums[i]=nums[i-1]&nums[i]=nums[i1])continue;nums[index++]=nums[i]returnindex;相关题目RemoveDuplicatesfromSortedArray,见§2.1.1
2019/5/20 21:34:34 866KB why
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡