数组
这周学的是图,既然是新的概念,首先要了解它的定义和基本术语,我们这里主要讲术语,包括但不限于有向图和无向图,邻接点,出度和入度,路径和路径长度,连通图和连通分量(这里重点讲一下)图中任意两个顶点属于V集合,则图是连通的,所谓连通分量,指的是无向图中的极大连通子图;对于有向图,就是它本身啊!不能再错了) 然后就是图的存储结构这里,主要有邻接矩阵和邻接表,邻接矩阵主要有两数组,顶点表和邻接矩阵,若有权值则需将矩阵中赋予相应的值;然后是邻接表,这里涉及到指针,在构建时,有3个结构体,我个人比较容易忘记是定点指针那里,还要多多回归课本。 对图的遍历主要有2种算法BFS和DFS;直接上代码: 然后是最小生成树这里,有两个重要的方法,一个是不断找能构成最小权值的边的顶点,把他补充到集合U中。
本书是根据2007年教育部颁发的《高等学校计算机科学与技术专业公共核心知识体系与课程》规范和2011年修订的《全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合考试大纲》编写的数据结构主教材。 全书共分10章。第1章介绍数据结构的地位和主要知识点、数据结构和算法的基本概念和算法分析的简单方法,以及C语言编程的要点
解析一段文本内的全部消息元素。其中的纯文本将会解析成 text 类型。 当传入 context 对象时,将会自动识别源文本中的插值语法并进行替换
在新版本中,我们提供了一种新的数组排序方式:整体排序。 排序的规则为:依据Y和Z所指向的值,对所有的Y轴进行排列,且不改变其数据结构。 可通过下面的示例去理解整体排序
我们主要进行关心的就是双重for循环以及其中的交换操作,首先外层循环表示要进行比较的趟数,每一趟都会产生一个最大值或最小值,这也就是冒泡的由来,i的范围限定为i < arr.length - 1,为什么不是i < arr.length呢?由上图可知,当未排序的数组中只有一个元素时,不需要再进行比较了,这时整个数组已经是有序状态了。那么内层循环中,为什么 j 的限制条件 为j < arr.length - 1 - i呢?这个也比较好理解,首先第一次的时候,要把 j 的范围限制在j < arr.length - 1 -0,这样arr[j] > arr[j+1]这样的操作才不会出现数组越界,进行第二趟比较的时候,arr[length -1]位置的元素已经是最大的,不需要再进行比较,这时候就要写成j < arr.length - 1 - 1,总结起来就是j < arr.length - 1 - i 但是我们进一步探究,上面的代码是存在这样的弊端的:加入第二趟排序之后,数组就已经是有序状态了,那么后面的几趟比较是不是非常多余呢?下面介绍冒泡排序的改进 代码都是自己在IDE中实现的,直接全部贴过来了,虽然看起来很冗长,其实关键的核心代码就那么几行,我们来看具体的改进方法,采用的方法就是设置一个flag变量,在当前这一趟比较中,如果发生了元素的交换,那么将flag设置为true,如果这趟比较从头到尾都没有进行过交换,那么最终的flag值为false,直接break退出循环。 用我自己的话理解呢,这个改进就是在之前的单向寻找最大值的基础上,增加了反向寻找最小值,也就是双向冒泡,总体上来讲,鸡尾酒排序要比普通冒泡排序的交换次数要少,但是对于鸡尾酒排序,在算法的时间复杂度和空间复杂度上并没有改进,在完全逆序数组进行排序时,不管是普通的还是改进的,表现得都是非常差
问给定一个整数二维数组,要求算出从左上角到右下角的“最短路径”。即每次移动只能取相邻元素,而要保证总路线经过的元素之和最小。 问什么是布隆过滤器? 问海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10? 问给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 问有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复
蓝桥杯2022年第十三届决赛真题-近似 GCD(C/C++组) 小蓝有一个长度为 n 的数组 A = (a1 a2 · · · an),数组的子数组被定义为从原数组中选出连续的一个或多个元素组成的数组。数组的最大公约数指的是数组中所有元素的最大公约数。如果最多更改数组中的一个元素之后,数组的最大公约数为 g,那么称 g 为这个数组的近似 GCD
十年磨一剑,历炼出锋芒,说话千百句,不如码二行。 数学是自然科学之母,数学也是算法之母,有一些数学相关的题目需要总结一下。当然暴力法也都是可以解决的,但是通过数学一些公式的引入会提升时间效率
分析:将a[0]存储在一个临时变量中,然后将a[i]替换a[0]a[2i]替换a[i]….当一个循环结束的时候,若替换次数小于n,则从a[1]开始替换…,需要经过gcd(ni)(n和i的最大公约数)次循环后,才能把每一个元素都移到该移的地方。
cout<<"str1= "<
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 这道题目要我们求解连续的 n 个数中乘积最大的积是多少。这里提到了连续,笔者首先想到的就是滑动窗口,但是这里比较特殊,我们不能仅仅维护一个最大值,因此最小值(比如-20)乘以一个比较小的数(比如-10) 可能就会很大






