遍历

数组(Array)——数组介绍

Deadly 提交于 2020-02-13 03:36:03
Arrays(数组) 数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。 为何使用数组存储一堆变量 与单独为每一个元素声明一个变量名相比,我们可以使用数组的索引值访问数组中的每一个元素。 例如:我们需要实现一个系统来存储办公室所有员工的年龄,传统的存储方式如下: 我们为办公室的每一个员工创建一个变量。假设办公室由三个员工,只需声明三个变量:empl_age,emp2_age和emp3_age. 当我们新招募员工进来时,我们需要创建更多的变量来存储员工的年龄。维护这样的系统非常麻烦,每添加一个新的员工,我们就需要修改这个系统的代码。 要人工计算超过20个员工的平均年龄,逐一访问每一个变量让人头痛的。 数组数据结构的出现尝试解决这种问题。数组的特性之一就是,以一个名称保存多个相同数据类型的数据。 在这个例子中,我们可以声明一个名为employees_ages的整型数组来保存所有员工的年龄。 数组的第二个特性就是,数组中的每一个数据元素被存储在一段连续的内存空间中,我们可以以索引的方式访问数组的数据元素。 通过遍历数组的索引来访问每个员工的年龄,使得计算员工年龄的平均值变得更加容易;因为在遍历过程中,数组的名称是恒定的,只有索引在变化。 声明一个一维数组 在使用一个数组之前

面试题7:重建二叉树

会有一股神秘感。 提交于 2020-02-13 03:35:36
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树,假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如:输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}则重建二叉树。 二叉树: 算法思路: 确定二叉树的根节点:先序序列的第一个数字就是根结点的值 确定左子树以及右子树:在中序序列中找到根节点,在根节点之前的都是左子树节点,在根节点之后的都是右子树节点 递归以上两步 关键点:算法中及其重要的是,找到中序序列中根节点的位置,继而确定左右子树长度以及函数参数。 代码如下: # include <iostream> # include <exception> using namespace std ; typedef struct Binarytree { int data ; Binarytree * lchild ; Binarytree * rchild ; } tree ; tree * Construct ( int * preorder , int * inorder , int length ) ; tree * ConstructCore ( int * startPreorder , int * endPreorder , int * startInorder , int * endInorder ) ;

Java Stream流式思想

孤街醉人 提交于 2020-02-13 01:53:37
说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 引言 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元 素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: import java.util.List; import java.util.ArrayList; import java.util.Collections; public class DemoForEach { public static void main(String[] args) { List<String> list = new ArrayList<>(); Collections.addAll(list, "Java", "C", "Python", "Hadoop", "Spark"); for (String s : list) { System.out.println(s); } } } 运行程序,控制台输出: Java C Python Hadoop Spark 这是一段非常简单的集合遍历操作

javaSE学习笔记(11)--- Map

淺唱寂寞╮ 提交于 2020-02-12 23:48:49
javaSE学习笔记(11)--- Map 1、Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口。 我们通过查看 Map 接口描述,发现 Map 接口下的集合与 Collection 接口下的集合,它们存储数据的形式不同,如下图。 Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 Collection 中的集合称为单列集合, Map 中的集合称为双列集合。 需要注意的是, Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。 Map常用子类 通过查看Map接口描述,看到Map有多个子类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合。 HashMap<K,V> :存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 LinkedHashMap<K,V> :HashMap下有个子类LinkedHashMap

图的存储结构之邻接表(详解)

有些话、适合烂在心里 提交于 2020-02-12 15:04:04
图的存储结构之邻接表(详解) 之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。 1 2 3 4 5 6 4 5 1 4 9 4 3 8 1 2 5 2 4 6 1 3 7 第一行两个整数n m。n表示顶点个数(顶点编号为1~n),m表示边的条数。接下来m行表示,每行有3个数x y z,表示顶点x到顶点y的边的权值为z。下图就是一种使用链表来实现邻接表的方法。 上面这种实现方法为图中的每一个顶点(左边部分)都建立了一个单链表(右边部分)。这样我们就可以通过遍历每个顶点的链表,从而得到该顶点所有的边了。使用链表来实现邻接表对于痛恨指针的的朋友来说,这简直就是噩梦。这里我将为大家介绍另一种使用数组来实现的邻接表,这是一种在实际应用中非常容易实现的方法。这种方法为每个顶点i(i从1~n)也都保存了一个类似“链表”的东西,里面保存的是从顶点i出发的所有的边,具体如下。 首先我们按照读入的顺序为每一条边进行编号(1~m)。比如第一条边“1 4 9”的编号就是1,“1 3 7”这条边的编号是5。 这里用u、v和w三个数组用来记录每条边的具体信息,即u[i]、v[i]和w[i]表示第i条边是从第u[i]号顶点到v[i]号顶点(u[i]àv[i]),且权值为w[i

数据结构:树和森林

偶尔善良 提交于 2020-02-12 12:16:09
树 树是数据结构内很重要的一种结构。不过我们此处不深究,仅讨论二叉树,线索二叉树,哈夫曼树(最优树)。 二叉树 定义: (1)空树;(2)只有一个根节点;(3)有左右两个子树,并且子树也是一颗二叉树(如图)。 性质: 1.第 i 层上最多有 2 i − 1 2^{i-1} 2 i − 1 个节点. 2.深度为k的树最多有 2 k 2^k 2 k -1个节点,我们称之为满二叉树,满二叉树在底层从右向左减少n个节点,此时称为完全二叉树。 3.度为0的结点的个数为度为2的节点个数加一, n 0 = n 2 + 1 n_0=n_2+1 n 0 ​ = n 2 ​ + 1 . 4.n个节点的完全二叉树的深度为[ l o g 2 n log_2n l o g 2 ​ n ]+1。 注释 :[x]表示不超过x的最大整数,也就是向下取整。 5.节点序号为 i ,在子节点存在的情况下,节点的序号为 2i和2i+1 遍历方式 1.先序遍历:先访问根节点,再访问左子树然后是右子树。 2.中序遍历:先访问左子树,再访问根节点然后再右子树。 3.后序遍历:先访问左子树,再访问右子树然后是根节点。 先序中序,后序中序能唯一的确定唯一一个二叉树 还有其他三种遍历方式 : 只需将以上三种方式的左和右换位置即可 存储结构 1.顺序存储结构(由于太浪费内存,所以说一般不用) 2.链式存储结构

[python]回答百度知道上的问题2000-2999之间的回文日

青春壹個敷衍的年華 提交于 2020-02-12 01:29:16
因为百度知道的编辑器没有提供代码功能,将回复写入。 题目如下: 求2000到2999的所有回文日,例如20200202 用Python怎么做 回文年好求,回文日的话,年月日这咋存啊 思路一:遍历每一天,将日期转换成文本格式,用于回文格式判断。实现如下: import datetime #用datetime库处理时间,遍历全部日期,生成字符型,判断是否为回文字符 #对8个字符的文本进行判断 #字符串的处理你可以观看菜鸟教程相关内容,链接:https://www.runoob.com/python/python-strings.html def isHuiWen(str): if(len(str) != 8): return False if(str[0] == str[7] and str[1] == str[6] and str[2]==str[5] and str[3] == str[4]): return True else: return False #print(isHuiWen('20200202')) #datetime.date1(year,month,day)用于生成日期 date1 = datetime.date(2000, 1, 1)#开始日期 date2 = datetime.date(2999, 12, 31) #结束日期 #这是没有筛选的范围

学习java习惯

五迷三道 提交于 2020-02-11 19:09:52
1. 抽象方法子类添加快捷键:Ctrl+1 2.非静态内部类 语法: new 外部类().new 内部类() eg: Hero hero = new Hero(); HeroScore score = hero.new HeroScore(); 3.默认方法 default加在接口中 可以在连接该接口的子类中加入default方法 通过这种手段,就能够很好的扩展新的类,并且做到不影响原来的类 4.父类构造方法在子类构造方法之前进行 5.super 若父类提供两个构造方法,一个有参,一个无参 public Hero(){ System.out.println("Hero的无参的构造方法 ");} public Hero(String name){ System.out.println("Hero的有一个参数的构造方法 "); this.name = name; } 1 2 3 4 5 6 7 子类实例化时, 默认掉用父类无参构造方法(因为可能父类没有提供构造方法) 若此时需要调用父类带参构造方法 用super(name); 值得注意的是,super是用来调用指定构造方法,而非有参 若super(); 则调用无参,即可认为子类构造方法中,本身就带有super(); eg:super(1,2)super(1) 且括号内数做其父类的参数 6.instanceof 7. Math

leetcode | 分类整理3(搜索)

依然范特西╮ 提交于 2020-02-11 17:10:53
搜索 : BFS:广度优先 每一层遍历的节点都与根节点距离相同 。设 di 表示第 i 个节点与根节点的距离,推导出一个结论:对于先遍历的节点 i 与后遍历的节点 j,有 di <= dj。利用这个结论, 可以求解最短路径等 最优解 问题 :第一次遍历到目的节点,其所经过的路径为最短路径。应该注意的是, 使用 BFS 只能求解无权图的最短路径。 在程序实现 BFS 时需要考虑以下问题: 队列:用来存储每一轮遍历得到的节点; 标记:对于遍历过的节点,应该将它标记,防止重复遍历。 1) 每一层遍历的节点都与根节点距离相同:决定了什么时候path++:就是每遍历一层之前保留queue.size,这个size就是这一层的大小 2) 什么时候置flag?已经从队列中poll了之后 3) 最优解问题:因为每次遍历的都是和根节点距离相同的节点,所以最先到达终点的一定是最短路径 1091. 二进制矩阵中的最短路径(m)(经典BFS+visited) 重点 :注意只有{0}一个数的情况 public int shortestPathBinaryMatrix(int[][] grid) { if(grid[0][0]==1 || grid[grid.length-1][grid[0].length-1]==1) return -1; if (grid.length == 1 && grid[0][0]

jQuery(四)

╄→尐↘猪︶ㄣ 提交于 2020-02-11 14:43:08
jQuery补充知识点 隐式迭代 基本概念 隐式迭代:jQuery在设置属性时会自动的遍历,因此我们不需要再遍历 jQuery在执行设置性操作时,会给所有的元素都设置上相同的值。 jQuery在执行获取性操作时,只会返回第一个元素对应的值。 如果想要给每一个元素都设置不同的值,需要手动进行遍历jQuery对象。 each方法 遍历jQuery对象集合,为每个匹配的元素执行一个函数 语法: // 参数一表示当前元素在所有匹配元素中的索引号 // 参数二表示当前元素, 在function中this也表示当前元素。 $(selector).each(function(index,element){}); 【案例:不同的透明度.html】 链式编程 链式编程的原理:设置性操作会返回一个jQuery对象,因此可以继续调用jQuery的方法。 设置操作的时候,可以使用链式编程。 获取操作的时候,无法使用链式编程。 end(); // 筛选选择器会改变jQuery对象的DOM对象,想要回复到上一次的状态,并且返回匹配元素之前的状态。 【案例:五角星评分案例.html】 prevAll();//获取前面所有的兄弟元素 nextAll();//获取后面所有的兄弟元素 siblings();//获取所有的兄弟元素 prev();//获取前一个兄弟 next();//获取后一个兄弟。 多库共存