遍历

Lab1-实验心得

痞子三分冷 提交于 2020-03-04 09:33:13
一、Magic Square 相对路径 这部分遇到的第一个问题是输入矩阵的文本找不到,后来经过查资料和测试发现,相对路径应该是Sting path=“src//P1//txt//”+“文件名”,在路径开始时用./src和src均可,/src不行。 非法字符排除 最初在写代码的时候直接将所有的矩阵按行读入后,进行tab分割,并转化为整形存进二维数组,但是对于有不是用tab隔离的文件或包含小数的文件,程序会报错。最终的解决方式是按行读入文件后,首先对每行字符串进行判断,如果字符中存在除数字和tab外的其它字符(如“-”,“.”“ ”等)表示输入不合法,跳过后续步骤判断“不是魔方”,如通过了此次判断,则用tab对字符串进行分割,将每个分割后的字符串转换为整形字符存入数组,在全部读入后进行求和和比较。 Git提交 这部分在提交时txt文件夹在目录下始终是灰色文件夹的状态,不能打开。我上网搜索了一下原因,有很多说是因为这个文件夹下有git相关文件,删除就可以。但是我的文件夹下(包括隐藏内容)只有六个.txt文件,最后采取了先把文件移到其他文件夹下,最后再复制粘贴的方法。但是还是没有从根本解决这个问题,以后会继续查资料找到问题的原因。 二、Turtle Graph 凸包问题 这是这次实验困扰我时间最长的一个问题,因为没有接触过凸包算法,几何的功底也比较薄弱(捂脸哭),所以这部分对我来说很有难度

数据结构 - 特殊接口、类

旧街凉风 提交于 2020-03-04 07:43:06
Iterable 接口: Iterable 的子类必须实现iterator()方法,次方法会返回迭代器对象。 Iterable最早出现在JDK 1.5,开始只有iterator()一个抽象方法,需要子类来实现一个内部迭代器Iterator遍历元素.后两个方法是Java 8后新添加的,forEach(Consumer action)是为了方便遍历操作集合内的元素,spliterator()则提供了一个可以并行遍历元素的迭代器,以适应现在cpu多核时代并行遍历的需求.   其中我们可以看下default修饰符,这也是Java 8后新出现的,我们知道,如果我们给一个接口新添加一个方法,那么所有他的具体子类都必须实现此方法,为了能给接口拓展新功能,而又不必每个子类都要实现此方法,Java 8新加了default关键字,被其修饰的方法可以不必由子类实现,并且由dafault修饰的方法在接口中有方法体,这打破了Java之前对接口方法的规范. 来源: CSDN 作者: 袁江南 链接: https://blog.csdn.net/nan8426/article/details/104615905

es6重点笔记:Symbol,Set,Map,Proxy,Reflect

喜夏-厌秋 提交于 2020-03-04 04:02:08
一,Symbol 原始数据类型,不是对象,它是JavaScript第七种数据类型,表示独一无二的值。Symbol是通过Symbol函数生成的: let s = Symbol(); typeof s // "symbol" 不用new,因为Symbol不是对象,而是原始值。Symbol通常作为内置的值来使用,最重要的一个属性: Symbol.iterator,该属性指向该对象的默认遍历器方法,所以 obj[Symbol.iterator]会返回该对象的默认遍历器,然后可以使用遍历器一些方法比如for...of 二,Set,Map 1,Set 类似于数组,但是成员的值都是唯一的,本身是构造函数,所以可以const s = new Set(); Set函数接收一个数组,会进行去重,但是注意返回的是Set结构,不是数组,因此要转换一下 [...new Set(array)],这就是最简单的数组去重。 Set生成的对象有size属性(实际是Set.prototype.size属性),代表里面成员个数,都是不重复的。 4个操作方法: add(value),添加某个值,返回Set结构本身,所以可以链式使用,连续add,但是如果add都是同一个,其实只算1个 delete(value),删除某个值,返回布尔值,表示是否删除成功 has(value),返回布尔值,表示是否为Set的成员 clear(

JS中的迭代

眉间皱痕 提交于 2020-03-03 23:27:40
for each...in 使用一个变量迭代一个对象的所有属性值。对于每一个属性值,有一个指定的语句块被执行。 作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,for each...in只会被禁用而不会被删除,可以使用ES6中新的for...of语句来代替。大部分非Mozilla浏览器都没有实现该标准,E4X并不是 ECMAScript 标准的一部分。 语法 for each (variable in object) { statement } 参数 variable 用来遍历属性值的变量,前面的var关键字是可选的。该变量是函数的局部变量而不是语句块的局部变量。 object 该对象的属性值会被遍历。 statement 遍历属性值时执行的语句。 如果想要执行多条语句,请用({ ... }) 将多条语句括住。 警告 永远不要使用for each...in语句遍历数组,仅用来遍历常规对象。 一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf方法。不过,大部分的用户自定义属性都是可遍历的。 for...in for...in语句以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。 语法 for (variable in object) {.

树边,前向边,后向边,横叉边

别来无恙 提交于 2020-03-03 21:37:47
原文地址: 树边,前向边,后向边,横叉边 树边,前向边,后向边,横叉边,应该说,不是一个图本身有的概念,应该是图进行DFS时才有的概念。图进行DFS会得到一棵DFS树(森林),在这个树上 才有了这些概念。对图进行DFS,可以从任意的顶点开始,遍历的方式也是多样的,所以不同的遍历会得到不同的DFS树,进而产生不同的树边,前向边,后向 边,横叉边。所以这4种边,是一个相对的概念。 在图的遍历中,往往设置了一个标记数组vis的bool值来记录顶点是否被访问过。但有些时候需要改变vis值的意义。令vis具有3种值并表示3种不同含义 vis = 0,表示该顶点没没有被访问 vis = 1,表示该顶点已经被访问,但其子孙后代还没被访问完,也就没从该点返回 vis = 2,,表示该顶点已经被访问,其子孙后代也已经访问完,也已经从该顶点返回 可以vis的3种值表示的是一种顺序关系和时间关系 《算法导论》334页有这4种边的准确定义,在此不累述 DFS过程中,对于一条边u->v vis[v] = 0,说明v还没被访问,v是首次被发现,u->v是一条树边 vis[v] = 1,说明v已经被访问,但其子孙后代还没有被访问完(正在访问中),而u又指向v?说明u就是v的子孙后代,u->v是一条后向边,因此后向边又称返祖边 vis[v] = 3,z说明v已经被访问,其子孙后代也已经全部访问完,u-

select、poll和epoll的区别和优缺点

陌路散爱 提交于 2020-03-03 18:03:03
原文地址: https://blog.csdn.net/BaiHuaXiu123/article/details/89948037 I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。select,poll,epoll都是IO多路复用的机制。但 select,poll,epoll本质上都是同步I/O ,因为他们都需要在读写事件就绪后自己负责进行读写, 也就是说这个读写过程是阻塞的 ,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。下来,分别谈谈。 select——> 原理概述: select 的核心功能是调用tcp文件系统的poll函数,不停的查询,如果没有想要的数据,主动执行一次调度(防止一直占用cpu),直到有一个连接有想要的消息为止。从这里可以看出select的执行方式基本就是不同的调用poll,直到有需要的消息为止。 缺点: 1、每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大; 2、同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大; 3、select支持的文件描述符数量太小了,默认是1024。 优点: 1、select的可移植性更好,在某些Unix系统上不支持poll()。 2

java集合框架+应用小技巧

北战南征 提交于 2020-03-03 14:48:57
一、大体介绍 1.接口 集体接口在collections: 提供了对集合进行排序,遍历等多种算法的实现 List是不唯一,有序的 Set是唯一,有序的 1.ArrayList 不唯一 有序 遍历效率高 2.LinkedList采用链接的方式,插入和删除的时候效率高 alt + s + r 生成set,get方法 alt + / 生成构造方法 添加 lis.add(dog1); lis.add(dog2); 这里添加的是object对象 lis.size()定义数组的长度 lis.remove(0); //删除索引号为0的对象 lis.remove(dog0);     //按照指定的对象名删除 2.HashSet-1 3.Set Set接口存储一组唯一,无序的对象 HashSet是Set接口常用的实现类 Set中存放对象的引用 4.Iterator 如何遍历Set集合 方法一 通过迭代器Iterator实现遍历 1.获取Iterator:Collection接口的iterator()方法 Iterator的方法 --boolean hasNext():判断是否存在另一个可 访问的元素 --Object next():返回要访问的下一个元素 方法二 增强型for循环 5.HashMap Map countries = new HashMap(); countries.get(

LeetCode——98. 验证二叉搜索树

懵懂的女人 提交于 2020-03-03 11:38:40
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 递归 利用其本身性质来做,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件,代码如下: C++ class Solution { public: bool isValidBST(TreeNode* root) { return isValidBST(root, LONG_MIN, LONG_MAX); } bool isValidBST(TreeNode* root, long mn, long mx) { if (!root) return true; if (root->val <= mn || root->val >= mx) return false; return isValidBST(root->left, mn, root->val) &&

js-关于数组

拥有回忆 提交于 2020-03-03 05:04:21
关于数组,应该是javaScript的一个很重要的知识点,那什么是数组呢? 数组可以说是对象的另外一种表现形式,数组中的特点就是存在于数组中的数据是有顺序的,每一个数据对应一个下标(全靠他了),并且是从0开始逐渐递增,数组的"长度"呢,也就是数组中存放的数据个数,数组中应该说可以放任意类型的数据,包括数字类型、字符串类型、布尔类型、null、undefined、函数类型的等等,这些都可以是数组的成员,但是在我们处理问题的时候会发现,我们把同一个类型的数据放在一个数组中,这样就更容易去处理或解决问题,毕竟我们学习数组,就是为了去解决实际存在的问题嘛。 1、数组的创建方式: (1)声明式 var arr=[a,b,c,d]; (2)构造函数方式 var arr=new Array(); 以上的两种方式都可以去创建数组,有一点需要注意的是,声明式的创建方式放一个数字的话,是表示在这个数组中开辟了一个小空间,里面存放了一个数字。构造函数的方式中如果小括号中写一个数字,表示是在这个数组中开辟了两个小的空间,并没有值,undefined; 2、数组的访问 访问数组的话,其实可以说是相当简单的,只需要通过下标即可,比如:我想要访问上面的a,那么就可以使用数组名[下标],注意一点下标是从0开始的。 3、数组的遍历 遍历说白了,也就是是说把数组中的数据值每一个都访问一遍