遍历

PHP基础2

喜欢而已 提交于 2020-02-22 05:48:58
正则表达式: 定界符:/开头/结尾 ^匹配开头  $匹配结尾  *前面的表达式可以出现n次可以为0 +前面的表达式至少出现一次  ?前面的表达式可出现1或0次 {n}匹配n次  {n,}最少匹配n次 最多不限 {n,m}最少匹配n次,做多m次  x|y匹配x或y次 [xyz]匹配其中任何一个 [a-z]匹配a-z之间任何一个 \d任意一个数字  \D任意一个非数字 \s任何不可见字符  \S匹配任何可见字符 \v制表符  \w包括下划线的任意单词字符 preg_replace寻找替换  preg_split将字符串分割 preg_match匹配第一个  preg_match_all匹配所有 数组: 定义数组:$arr=array(1,2,3,4,5) 强类型语言数组特征:1.只能存储相同类型的数据           2.数组的长度固定           3.在内存里面是连续的 取值echo $arr[0] 默认从0开始 关联数组:$arr1=array(“one”=>"111","two"=>"222") 非常规定义方式: $arr2["one"]="aaa"(赋值定义) 删除数组元素 unset($arr[2]) 添加数组元素$arr[2]=10  追加元素$arr[]=10) 遍历数组: 1.for循环遍历(只能遍历索引数组) for($a=0;$a<count($arr)

列表操作(增删改查)

拥有回忆 提交于 2020-02-21 22:54:11
四、列表操作 4.1列表增加 (1) append()在列表尾部增加元素 a=[1,2] a.append(3) a [1, 2, 3] (2) insert(1,2)在第2个位置前插入2 a=[1,2] a.append(3) a [1, 2, 3] a.append(4) a [1, 2, 3, 4] a.insert(0,1.1) //在第一个位置前插入1.1 a [1.1, 1, 2, 3, 4] a.insert(3,“aa”) //在第3个位置前插入“aa” a [1.1, 1, 2, ‘aa’, 3, 4] len(a) //查看列表的长度 6 a.insert(len(a)-1,“xxx”) //在列表的最后面插入“xxx” a [1.1, 1, 2, ‘aa’, 3, ‘xxx’, 4] 4.2列表删除 a=[1.1,1,2,“a”,3,“xxx”,4] del a[0] //删除列表中第一个元素 a [1, 2, ‘a’, 3, ‘xxx’, 4] //删除列表中的最后一个元素 del a[-1] a [1, 2, ‘a’, 3, ‘xxx’] del a[2] //删除列表中的第三个元素 a [1, 2, 3, ‘xxx’] 4.3列表修改 直接修改 a[0]=1111 //直接将第一个元素修改为1111 a [1111, 2, 3, ‘xxx’] 4

C# foreach循环的用法

≯℡__Kan透↙ 提交于 2020-02-21 19:13:34
foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。 该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面 的执行语句。 foreach语句经常与数组一起使用,下面实例将通过foreach语句读取数组的值并进行显示。 数组的属性:Array.Length数组的容量 利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。 当数组的维数、容量较多时,C#提供了foreach语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下: 遍历数组:foreach(type objName in collection/Array) 这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型

集合的遍历以及排序

痴心易碎 提交于 2020-02-21 05:49:34
一.List的遍历和排序 List<Integer> list = new ArrayList<Integer>(); list.add(11); list.add(1); list.add(12); list.add(5); System.out.println("-------for循环遍历----------"); for (int i =0;i<list.size();i++){ System.out.println(list.get(i)); } System.out.println("---------foreach遍历--------"); for(Integer i:list){ System.out.println(i); } System.out.println("-----------------"); // 排序方式1 Collections.sort(list); //升序 //降序 Collections.sort(list, new Comparator<Integer>(){ @Override public int compare(Integer o1,Integer o2){ return o2 - o1; } }); for(Integer i :list ){ System.out.println(i); } System.out

LCA最近公共祖先(Tarjan离线算法)详解(转)

只谈情不闲聊 提交于 2020-02-21 04:55:15
转自 https://www.cnblogs.com/ECJTUACM-873284962/p/6613379.html 首先是最近公共祖先的概念(什么是最近公共祖先?):     在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上 深度最大 的 公共 的 祖先节点 。     换句话说,就是两个点在这棵树上 距离最近的公共祖先节点 。     所以LCA主要是用来处理当两个点仅有 唯一一条 确定的最短路径时的路径。     有人可能会问:那他本身或者其父亲节点是否可以作为祖先节点呢?     答案是肯定的,很简单,按照人的亲戚观念来说, 你的父亲也是你的祖先 ,而LCA还可以 将自己视为祖先节点 。     举个例子吧,如下图所示 4 和 5 的 最近公共祖先是2 , 5 和 3 的 最近公共祖先 是 1 , 2 和 1 的 最近公共祖先 是 1 。      这就是最近公共祖先的基本概念了,那么我们该如何去求这个最近公共祖先呢?     通常初学者都会想到最简单粗暴的一个办法:对于每个询问,遍历所有的点,时间复杂度为 O(n*q) ,很明显, n和q一般不会很小 。     常用的求LCA的算法有:Tarjan/DFS+ST/倍增     后两个算法都是在线算法,也很相似,时间复杂度在 O(logn)~O(nlogn) 之间

二叉树的中序遍历

旧巷老猫 提交于 2020-02-20 03:05:08
题目: 思路: 利用栈做迭代: 先遍历所有节点,直到找到最左节点,将这个节点的父节点抛出,加入栈,再遍历右子树. 代码: class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: ans,res=[],[] while ans or root: if root: ans.append(root) root=root.left else: root=ans.pop() res.append(root.val) root=root.right return res 来源: CSDN 作者: 海边的一只猿 链接: https://blog.csdn.net/qq_29760277/article/details/104400213

二叉树已知前序和中序序列求后序序列(华科软院上机)

落爺英雄遲暮 提交于 2020-02-20 00:34:27
问题分析: 已知一颗二叉树S的前序遍历和中序遍历序列,请编程输出二叉树S的后续遍历序列。 (举例:pre[]/先序:A、B、D、E、C、F、G; in[]/中序:D、B、E、A、C、G、F; 后序遍历序列是:D、E、B、G、F、C、A) #include<stdio.h> #include<string.h> //在中序序列中查找根节点下标的函数,函数参数为:根节点符号,中序序列,中序序列起始下标,中序序列结束下标 int findroot(char c,char in[],int in_s,int in_e) { int i; for(i=in_s;i<=in_e;i++) { if(in[i]==c) //若在中序序列中找到根节点的符号,则退出循环,返回下标 break; } return i; } // 递归求后序序列的函数,函数参数分别为:先序序列、先序序列起始下标、先序序列结束下标、中序序列、中序序列起始下标、中序序列结束下标 void postorder(char pre[],int pre_s,int pre_e,char in[],int in_s,int in_e) { char c; //根节点符号 int root; //根节点在中序中的下标 int l_len,r_len; //左、右子树节点数 if(in_s==in_e) //如果中序序列只有一个节点

剑指offer-根据前序和中序遍历构建二叉树,年龄排序

夙愿已清 提交于 2020-02-19 11:13:57
根据前序和中序遍历序列构建二叉树 思路: 根据前序序列找到根在中序序列中的位置,从而找到左右子树的中序序列,再根据左右子树的长度,找到它们的前序序列,递归计算。 代码: """ 使用先序遍历和中序遍历的结果重建二叉树 """ from collections import deque class TreeNode(object): """ 二叉树结点定义 """ def __init__(self, x): self.val = x self.left = None self.right = None class Tree(object): """ 二叉树 """ def __init__(self): self.root = None def bfs(self): ret = [] queue = deque([self.root]) while queue: node = queue.popleft() if node: ret.append(node.val) queue.append(node.left) queue.append(node.right) return ret def pre_traversal(self): ret = [] def traversal(head): if not head: return ret.append(head.val)

vue自定义组件及传值

我是研究僧i 提交于 2020-02-19 08:33:52
1、使用 Vue.component() 方法注册组件 2、使用 props 属性传递参数 v-for="item in items":   遍历 Vue 实例中定义的名为 items 的数组,并创建同等数量的组件 :user="item":   将遍历的 item 项绑定到组件中 props 定义的名为 user 属性上;= 号左边的 user 为 props 定义的属性名,右边的为 item in items 中遍历的 item 项的值   父组件给子组件传参,如果参数不是变量,则定义的属性无需绑定,user="姓名"   v-bind: 绑定属性,绑定属性的目的是 把属性后面的值变为 变量 来源: https://www.cnblogs.com/qq254980080/p/10462550.html

深入理解 JavaScript 事件循环(一)— event loop

限于喜欢 提交于 2020-02-18 22:04:56
引言   相信所有学过 JavaScript 都知道它是一门单线程的语言,这也就意味着 JS 无法进行多线程编程,但是 JS 当中却有着无处不在的 异步 概念 。在初期许多人会把异步理解成类似多线程的编程模式,其实他们中有着很大的差别,要完全理解异步,就需要了解 JS 的运行核心—— 事件循环(event loop) 。在之前我对事件循环的认识也是一知半解的,直到我看了 Philip Roberts 的演讲 What the heck is the event loop anyway? ,我才对事件循环有了一个全面的认识,所以我想写一篇介绍 JS 事件循环的文章,以供大家学习和参考。 一、为什么会有异步?   为什么 JS 当中会有异步?我们想象一下,如果我们同步的执行一下代码会发生什么: 1 $.get(url, function(data) { 2 //do something 3 });   在我们使用 ajax 进行通信的时候,我们都默认了它是异步的,但是如果我们设置其为同步执行,会发生什么?如果你自己写一个小的测试程序,将后台代码延迟5s你会发现浏览器会出现阻塞,直到 ajax 响应了之后才会正常运行。这便是异步模式要解决的首要问题,如何使浏览器非阻塞的运行任务。想象一下如果我们同步的执行 ajax 请求的话,我们的等待的时间是一个未知数,在网络通信中可能很快也可能很慢