用数组实现一个线性表
2024/12/12 21:04:19 3KB 数组
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
一、单项选择题ABCBDACBDC二、简答题1.链式存储结构。
原因:线性表在处理过程中长度会动态地变化,说明对线性表的操作使以增加和删除数据为主。
而顺序存储结构在增加和删除数据的时候需要整体移动数据的位置,比较复杂,所以宜采用链式存储结构。
2.最少有73个,最多有235个。
3.(1)矩阵中不为0的元素的二分之一。
(2)矩阵中对应该顶点的行或列中非零元素的个数。
(3)矩阵中i对应的行和j对应的列的交点元素是否为0。
为0的话就不存在边,不为0则存在边。
4.①折半插入排序比较次数取决于每一趟的折半次数,而折半次数只取决于元素个数而与序列的初始状态无关。
②当排序序列元素个数较小时。
三、综合题1.交换双向链表中某个指定结点与其直接后继结点的位置。
2.三个。
如下图 6 2 3 4 5 5 1 1 1 1 1 1 1 1 1 1 3.前序:ABDEGCFH后序:DGEBHFCA4.深度优先:ACBDE广度优先:ACEBD四、算法设计题
2024/11/17 4:23:51 141.94MB 考研真题
1
内含数据结构关于各种线性表,树,查找,排序的算法思想及代码
2024/11/5 4:23:38 68KB 数据结构 必备算法
1
输入一页文字,程序可以统计出文字、数字、空格的个数。
  静态存储一页文章,每行最多不超过80个字符,共N行;
要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
  存储结构使用线性表,分别用几个子函数实现相应的功能;
  输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
  输出形式:(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
1
(产品产品包:航空订票系统.rar开发说明书:航空订票系统开发说明书产品源代码名:航空订票系统.cpp开发文档:开发成员名单.xls帮助文档:帮助.xls)一.设计题目航空客运订票的业务活动包括:查询航线、客票预订和办理退票等运订票系统,以使上述业务可以借助计算机来完成。
二.需求分析(一) 功能描述(1)每条航线所涉及的够息有:终点站名、航班号、星期几、乘员定额、众票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票层);
(2)作为示意系统,全部数据可以只放在内存中;
(3)系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额。
②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续.输出座位号;
若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;
③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求.则为他力、理订票手续,否则依次询问其它排队候补的客户。
(二) 实现提示两个客户名单可分别由线性表和队列实现。
为查找方便.已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线约情况登录在一张线性表上,由于航线基本不变.可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的—个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等侯替补的客户名单域为分别指向队头和队尾的指针。
(三) 功能结构图(四) 模块划分1) 航班查询根据旅客提出的终点站名输出航班号、星期几飞行,最近一天航班的日期以及余票额情况。
2) 用户订票根据客户提出的要求查询该航班票额情况,若尚有余票,则为客户办理订票手续.输出座位号;
若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
3) 用户退票根据客户提出的要求查询该客户的订票情况,若情况属实则可确认退票。
4) 开发简介表明产品名及开发人员情况。





2024/8/22 17:07:12 1.97MB C C++
1
学习数据结构,代码完整,有线性表,栈,队列,串,树,图等实例
2024/8/20 7:04:27 6.23MB 数据结构
1
深圳大学数据机构课程上机代码参考(C++),里面有82个题目的参考代码,内容覆盖了线性表、栈与队列、串、数组、广义表、树、图、查找、排序等方面。
同时也适合正在学习数据结构的你
2024/7/15 19:45:37 143KB 数据结构 程序设计 C++
1
数据结构(C语言版)(第2版)课后习题答案 李冬梅2015.3目录第1章绪论 1第2章线性表 5第3章栈和队列 13第4章串、数组和广义表 26第5章树和二叉树 33第6章图 43第7章查找 54第8章排序 65
2024/6/19 6:36:15 1.48MB 数据结构 李冬梅
1
1.掌握自顶向下语义分析中语义子程序的添加过程;
2.掌握“拉链”、“回填”操作的原理及实现;
3.根据MiniC的上下文无关文法,对赋值语句、算术表达式、关系表达式、if-else语句、while语句、布尔表达式(选作内容)等语法结构添加语义子程序;
4.针对测试代码,输出四元式序列。
5.以文件流的形式读入要分析的C语言程序;
6.使用四元式类,将四元式对象放置在四元式线性表(如:ArrayList)中;
7.自行测试多组本次实习语法结构(赋值语句、普通表达式、关系表达式、if-else语句、while语句),将四元式序列输出到文件中。
2024/6/16 14:40:03 10KB 编译原理 javacc 语义分析
1
共 52 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡