遍历

JS数组遍历方法every()和some()的实用技巧

為{幸葍}努か 提交于 2020-03-10 05:56:57
使用every和some代替forEach 因为forEach可以用return进行类似for循环中continue的功能,但for循环中break的功能无法实现,而every和some都通过控制return的值来控制循环中断跳出break。 具体做法是: every方法返回值是布尔类型,最终返回值为true需要每一次回调函数返回值都为true,如果某一次回调函数返回值为false则every方法结束对数组的遍历并返回false,所以在想要跳出循环时回调函数return false,因为every会对callback回调函数中的返回值做的判断处理类似于&&。 some方法返回值是布尔类型,最终返回值为true只需要任意一次回调函数返回值为true就会结束对数组的遍历,如果每一次回调函数返回值都为false的话则some方法就会一直遍历辖区并返回false,所以在想要跳出循环时回调函数return true,因为some会对callback回调函数中的返回值做的判断处理类似于||。 实际运用中,如果希望跳出循环时得到的判断值为true的话则用some,如果希望跳出循环时得到的判断值为false的话则用every。 来源: CSDN 作者: subwaysamurai 链接: https://blog.csdn.net/GahoYeung/article/details

二叉树的基础遍历---前序遍历,中序遍历以及后序遍历

早过忘川 提交于 2020-03-10 05:08:35
二叉树的基础遍历 1:前序遍历 :先访问根结点,然后再访问左子树,最后访问右子树; 2:中序遍历 :先访问左子树,然后再访问根结点,最后访问右子树; 3:后序遍历 :先访问左子树,然后再访问右子树,最后访问根结点; 示例如下: 前序遍历的API设计: public Queue preErgodic():使用前序遍历,获取整个树中的所有键 private void preErgodic(Node x,Queue keys):使用前序遍历,把指定树x中的所有键放入到keys队列中 实现步骤: 把当前结点的key放入到队列中; 找到当前结点的左子树,如果不为空,递归遍历左子树; 找到当前结点的右子树,如果不为空,递归遍历右子树; 代码实现: //使用前序遍历获取整个树中所有的键 public Queue < Key > preErgoidic ( ) { Queue < Key > keys = new Queue < > ( ) ; preErgoidic ( root , keys ) ; return keys ; } //使用前序遍历获取指定树x的所有键,并放到Keys队列中 private void preErgoidic ( Node x , Queue < Key > keys ) { if ( x == null ) { return ; } /

Java——集合

假如想象 提交于 2020-03-10 02:59:49
文章目录 五、集合 1、集合简介 2、List 2.1 ArrayList 2.2 LinkedList 2.3 区别 2.4 遍历List 2.5 List和Array转换 List -> Array Array -> List 3、编写equals方法 4、Map 4.1 遍历Map 5、编写equals和hashCode 6、EnumMap 7、TreeMap 8、Properties 9、Set 9.1 TreeSet 10、Queue 10.1 LinkedList 11、PriorityQueue 12、Deque 13、Stack 14、Collections 14.1 创建空集合 14.2 创建单元素集合 14.3 排序 14.4 洗牌 14.5 不可变集合 五、集合 1、集合简介 在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。很显然,Java的数组可以看作是一种集合。 String [ ] ss = new String [ 10 ] ; // 可以持有10个String对象 ss [ 0 ] = "Hello" ; // 可以放入String对象 String first = ss [ 0 ] ; // 可以获取String对象 为什么在又了数组这种数据类型后,还需要其他集合类?

java Stream流随笔

感情迁移 提交于 2020-03-10 02:29:55
Stream是jdk8的新特性,JDK8加入 了 java.util.stream包,实现了集合的流式操作,流式操作包括集合的过滤,排序,映射等功能。根据流的操作性,又可以分为 串行流 和 并行流。根据操作返回的结果不同,流式操作又分为中间操作和最终操作。大大方便了我们对于集合的操作。 最终操作:返回一特定类型的结果。 中间操作:返回流本身 什么是 流:Stream 不是 集合元素,也不是数据结构,它相当于一个 高级版本的 Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。它和普通的 Iterator 不同的是,它可以并行遍历,普通的 Iterator 只能是串行,在一个线程中执行。 中间操作: filter(): 对元素进行过滤 sorted():对元素排序 map():元素映射 distinct():去除重复的元素 最终操作: forEach():遍历每个元素。 reduce():把Stream 元素组合起来。例如,字符串拼接,数值的 sum,min,max ,average 都是特殊的 reduce。 collect():返回一个新的集合。 min():找到最小值。 max():找到最大值。 来源: https://www.cnblogs.com/Fsight/p/12452649.html

Python 字符串切片

不想你离开。 提交于 2020-03-09 22:02:24
#-*- coding:utf-8 -*- #字符串切片 names = "abcdefgh" ''' 切片语法 names[起始位置:终止位置:步长] 起始位置:即字符串的下标,可以是正序下标(0,1,2...),也可以是逆序下标(-1,-2,-3...) 终止位置:也是字符串的下标,但是和起始位置下标不同的是终止位置下标指向的元素并不会被包含在内 步长:默认值是1,当步长>0,表示从左向右遍历,当步长<0,表示从右向左遍历 起始位置或者终止位置的值缺省,那么会根据步长的正负决定遍历的方向 ''' print(names[2:5]) #打印cde 不包含names[5]的值 print(names[2:6]) #打印cdef #从e开始截取到字符串末尾 print(names[4:]) #打印efgh #从e开始截取到倒数第二个字符 print(names[4:-1]) #间隔着打印字符串 print(names[::2]) #打印aceg #逆序打印字符串 print(names[::-1]) 来源: https://www.cnblogs.com/zhanggaofeng/p/9222595.html

二叉树遍历

冷暖自知 提交于 2020-03-09 18:17:40
两种遍历树的策略: 深度优先搜索(DFS) 在这个策略中,我们采用深度作为优先级,以便从跟开始一直到达某个确定的叶子,然后再返回根到达另一个分支。 方法一、递归 深度优先搜索策略又可以根据根节点、左孩子和右孩子的相对顺序被细分为前序遍历,中序遍历和后序遍历。 前序遍历:根->左->右 中序遍历:左->根->右 后序遍历:左->右->根 res.push_back(root->val);//打印根节点 helper(root->left); helper(root->right); 迭代 深度优秀遍历用递归求解非常简单,难的是 迭代 方法: 前序遍历 首先我们应该创建一个 Stack 用来存放节点,首先我们想要打印根节点的数据,此时Stack里面的内容为空,所以我们优先将头结点加入Stack,然后打印。 之后我们应该先打印左子树,然后右子树。所以先加入Stack的就是右子树,然后左子树。 此时你能得到的流程如下: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; if(!root)return {}; stack<TreeNode*> s; TreeNode *tmp=root; while(tmp || !s.empty()){ if(tmp){ s.push(tmp); res.push_back

2020-3-9刷题

和自甴很熟 提交于 2020-03-09 13:38:58
以下代码输出什么? B int a =1,b =32 ; printf("%d,%d",a<<b,1<<32); A 1,1 B 1,0 C 0,0 D 0,1 << 左移 用来将一个数的各二进制位全部左移N位,高位舍弃,低位补0。 >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。 左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。 a的二进制值:0000 0001 b的二进制值:0010 0000 a<<b:a左移32位,得到结果1。 进行探索, 当a左移1位,printf("%d",a<<1); 打印结果是:2 当a左移2位,printf("%d",a<<2); 打印结果是:4 ...... 当a左移30位,printf("%d",a<<30); 打印结果是:1073741824 当a左移31位,printf("%d",a<<30); 打印结果是:-2147483648 当a左移32位,printf("%d",a<<30); 打印结果是:1 当a左移33位,printf("%d",a<<30); 打印结果是:2 当a左移34位,printf("%d",a<<30); 打印结果是:4 ...... 当a左移34位,printf("%d",a<<30); 打印结果是:4 ... 当a左移62位,printf("%d

算法刻意练习-LeetCode实战09-环形链表

天涯浪子 提交于 2020-03-09 10:44:19
环形链表: 原题链接: 环形链表 这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(INT_MAX)。 一直遍历,这时有两种情况:如果是环形链表,则一定会再次遍历到这个节点,即如果在遍历的过程中遇到数据域为INT_MAX的节点,证明有环,返回true;如果没有环,则一定会出现被遍历到的节点为NULL的情况,返回false。 代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head ) { if ( head == NULL ) return false ; while ( head != NULL && head - > val != INT_MAX ) { head - > val = INT_MAX ; head = head - > next ; } if ( head == NULL ) return false ; else return true ; } } ; 执行情况:

根据前序遍历和中序遍历求后序遍历

做~自己de王妃 提交于 2020-03-09 07:53:04
根据前序遍历和中序遍历求后序遍历 一道HULU的笔试题(How I wish yesterday once more) 假设有棵树,长下面这个样子,它的前序遍历,中序遍历,后续遍历都很容易知道。 PreOrder: GDAFEMHZ InOrder: ADEFGHMZ PostOrder: AEFDHZMG 现在,假设仅仅知道前序和中序遍历,如何求后序遍历呢?比如,已知一棵树的前序遍历是”GDAFEMHZ”,而中序遍历是”ADEFGHMZ”应该如何求后续遍历? 第一步,root最简单,前序遍历的第一节点G就是root。 第二步,继续观察前序遍历GDAFEMHZ,除了知道G是root,剩下的节点必然是root的左右子树之外,没法找到更多信息了。 第三步,那就观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。 第四步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。 第五步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的右子树的第一个节点就是右子树的根节点。

二叉树的中序遍历

徘徊边缘 提交于 2020-03-09 05:02:26
文章目录 递归 递归时直接打印 辅助函数 迭代 基于栈的遍历 注 给定一个二叉树,返回它的中序 遍历。 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ 递归 递归时直接打印 public static void inOrderRecur(Node root){ if(root== null) return; inOrderRecur(root.left); System.out.print(root.value + " "); inOrderRecur(root.right); } 辅助函数 时间复杂度:O(n),递归函数T(n)=2*T(n/2)+1 空间复杂度:最坏情况下需要空间O(n),平均情况为O(logn) class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer>list = new ArrayList(); helper(root,