大家好我是苏麟,今天说说数的层序遍历.层次遍历简介广度优先在面试里出现的频率非常高,整体属于简单题,但是很多人面试遇到时就直接放弃了,实在可惜。我们本章就集中研究一下到底难在哪里。广度优先又叫层次遍历,基本过程如下:层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样一层层访问。我们可以看到这里就是从左到右一层一层的去遍历二叉树,先访问3,之后访问3的左右子孩子5和4,之后分别访问5 和4的左右子孩子[7,6]和[9],最后得到结果[3,5,4,7,6,9]。这里的问题是怎么将遍历过的元素的子孩子保存一下呢,使用队列来存储能完美解决上述问题,例如上面的图中:
本期大纲线性表基础线性表概念数组概念数组的基本操作数组创建和初始化查找一个元素增加一个元素修改一个元素删除一个元素小题一道--单调数组问题小题一道--数组合并问题小结线性表基础线性表概念我们先搞清楚几个基本概念,在很多地方会看到线性结构、线性表这样的表述,那什么是线性结构?与数组、链表等有什么关系?常见的线性结构又有哪些呢?所谓线性表就是具有相同特征数据元素的一个有限序列,其中所含元素的个数称为线性表的长度,从不同的角度看,线性表可以有不同的分类,例如:从语言实现的角度从语言实现的角度顺序表有两种基本实现方式,一体式和分离式,如下:图a为一体式结构,存储表信息的单元与元素存储区以连续的方式安排
1.删除元素1.1原地删除等于val的元素1.1.1快慢双指针。publicintremoveElement(int[]nums,intval){ intslow=0;for(intfast=0;fastnums.length;fast++){if(nums[fast]!=val){nums[slow]=nums[fast];slow++;}}returnslow;}1.1.2对撞双指针:用右边不是val的元素替换掉左边等于val的元素。publicintremoveElement(int[]nums,intval){ intright=nums.length-1;intleft=0;for(
第一关原来链表这么有用链表青铜关卡链表增删改查链表白银关卡两个链表第一个公共子节点问题判断链表是否为回文序列合并有序链表链表经典问题之双指针链表黄金关卡待更新。。。第二关两天写了三次的链表反转链表反转青铜挑战三种方式实现手写链表反转链表反转白银挑战指定区间反转两两交换链表节点单链表加一链表加法链表反转黄金挑战待更新。。。第三关爱不起的数组与双指针思想数组与双指针青铜挑战不简单的数组增删改查数组与双指针白银挑战双指针思想及其应用数组与双指针黄金挑战待更新。。。第四关站不住的栈栈青铜挑战基于数组和链表实现栈栈白银挑战栈的经典问题解析栈黄金挑战待更新。。。第五关算法的备胎hash和找靠山的队列has
白银挑战-动态规划高频问题1.最少硬币数LeetCode322https://leetcode.cn/problems/coin-change/description/思路分析尝试用回溯来实现假如coins=[2,5,7],amount=27,求解过程中,每个位置都可以从[2,5,7]中选择,因此可以逐步将所有情况枚举出来,然后再找到要求的最少硬币数,图示如下:通过上面的图,发现f[20]等已经存在多次重复计算了,存在大量重复计算的问题,效率低。尝试用贪心来实现直觉告诉我们尽量使用大的,假如coins=[2,5,7],amount=27先连续用7+7+7=21,剩下6用2+2+2=6,一共7+
目录1、从网站直接下载clipconverter.cckeepvidSavefrom.net2、通过软件下载维棠视频AllavsoftTubeMateIDM有朋友留言说不知道怎么下载视频,看来大家很着急,我之前也答应大家分享国外网站如何下载视频,今天跟大家分享这些方法。关于国外视频下载的方法有很多种,今天给大家介绍的是常用的一些方法。之前有粉丝留言说国外视频的下载并不难,他说的也没错,你学了之后就发现下载的确没有想象中的那么难。国内网的网站上,怎样把需要的视频下载下来呢?1、从网站直接下载大家应该都知道我们下载国内视频,可以在硕鼠官网,把视频链接复制过去就可以。国外也有这样的网站,直接复制网址
1.原地移除所有数值等于val的元素LeetCode27.给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1:输入:nums=[3,2,2,3],val=3输出:2,nums=[2,2]解释:函数应该返回新的长度2,并且nums中的前两个元素均为2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为2,而nums=[2,2,3,3]或nums=[2,2,0,0]也会被视作正确答案
「链表LinkedList」是一种线性数据结构,其每个元素都是一个节点对象,各个节点之间通过指针连接,从当前节点通过指针可以访问到下一个节点。由于指针记录了下个节点的内存地址,因此无需保证内存地址的连续性,从而可以将各个节点分散存储在内存各处。链表「节点Node」包含两项数据,一是节点「值Value」,二是指向下一节点的「指针Pointer」,或称「引用Reference」。–来源hello算法classNode{intdata;Nodenext;publicNode(intdata){this.data=data;next=null;}}如何操作链表?不管是什么结构,最开始一定要搞明白增删改
目录Go中的切片切片中增加元素思路分析Go代码切片中删除元素思路分析Go代码Go中的切片在golang中,切片的底层就是数组,切片是对底层数组的引用,当传递一个切片给函数时,实际上是传递了切片的引用。因此,在函数内部修改切片的内容会影响原始切片。切片中增加元素思路分析先声明并初始化一个长度为当前切片长度+1的切片首部添加:将其余全部向后移动一位,然后给首位赋值即可。尾部添加:直接给尾部赋值即可。中间添加:先查找到要添加的位置,然后将添加位置后的元素全部向后移动一位,然后给添加的位置赋值即可。*这里假定该切片是单调序列,为了提高查询效率,使用二分法查找。Go代码源码地址:GitHub-golan
LeetCode19删除链表的倒数第n个结点,中等难度这道题可以利用双指针来解决先让fast指针走n步,然后两个指针一起走,当fast指针走到链表尾部时,slow正好是要删除的前一个结点。注意这里的判断条件是fast.next,如果不是这个,想是fsat,则需要先加一个虚结点。classSolution{publicListNoderemoveNthFromEnd(ListNodehead,intn){ListNodefast=head;ListNodeslow=head; //fast先走n步for(inti=0;i当然这道题也可以用递归解决。classSolution{publicList