查找算法

回文串

折月煮酒 提交于 2019-11-26 12:59:02
回文串 判断字符串是否是回文串 查找字符串中最长的回文子串 查找字符串中所有的回文子串 执行结果 代码 import java.util.ArrayList; public class StringSeriesOne { //判断字符串是否是回文串 public boolean isPalindrome(String s){ if(s == null) return false; char[] array = s.toCharArray(); int left = 0; int right = array.length -1; while(left<right){ if(array[left++] != array[right--]) return false; } return true; } //判断字符串是否是回文串 public boolean isPalindrome1(String s){ if(s==null) return false; char[] array = s.toCharArray(); for(int i=0; i<array.length/2; i++){ if(array[i] != array[array.length-1-i]) return false; } return true; } //查找字符串中最长的回文子串:中心拓展法1 O(n2

查找两个数组的相同字符(两个超大文件的相同字符)

ε祈祈猫儿з 提交于 2019-11-26 11:35:27
1. 找到两个数组中的相同元素 数组A 数组B 方法1:对A中的数组进行排序,采取同样的排序方法对B中的数组进行排序 1)从A,B中各自取出a,b进行比较 2)如果a>b,那么从B中取出下一个数据b进行比较   3)如果a<b,那么从A中取出下一个数据a进行比较 4)如果a=b,那么找到一个,继续 方法2:hash   1)对A中的m个数据装入到hash表 2)对B中的n个数据一次去hash表中查询,如果找到那么就是相同元素 升级:如果数据特别大,内存无法装下。 两个大文件,查找相同字符串   hash,分治法: 1)采用hash算法对A文件进行hash成a个小文件 2)采取同样的hash算法对B文件进行hash成b个小文件 3)比较小文件对<a1,b1>.........因为hash的问题,所以相同的字符串肯定在同个文件对里面。 4)统计小文件对,可以继续采用hash,对a1的每一字符串建立hash表,遍历b1的字符串看是否在之前构建的hash表里面(和上面一样) 一般来说,如果内存可以存放,可以构造hash表,进行查找。如果内存无法加载,那么可以通过hash把大文件分成多个小文件,从而进行比较。 hash算法在海量数据中的运用: 单机处理大数据的问题也和mapreduce一样,分而治之,把海量数据切分成若干个小份进行处理。 1)分而治之 采用hash进行取模进行等价映射

Javascript 性能优化

一个人想着一个人 提交于 2019-11-26 08:59:26
Javascript最初是解释型语言,现在,主流浏览器内置的Javascript引擎基本上都实现了Javascript的编译执行,即使如此,我们仍需要优化自己写的Javascript代码,以获得最佳性能。 注意作用域 避免全局作用域 在之前的文章 Javascript 变量、作用域和内存问题 提到过,由于访问变量需要在作用域链上进行查找,相比于局部变量,访问全局变量的开销更大,因此以下代码: var person = { name: "Sue", hobbies: ["Yoga", "Jogging"] }; function hobby() { for(let i=0; i<person.hobbies.length; i++) { console.log(person.hobbies[i]); } } 可以进行如下优化: function hobby() { let hobbies = person.hobbies; for(let i=0; i<hobbies.length; i++) { console.log(hobbies[i]); } } 把需要频繁访问的全局变量赋值到局部变量中,可以减小查找深度,进而优化性能。 当然,上述优化过的代码仍然有不足的地方,后面的部分会提到。 避免使用 with 为什么避免使用 with ? with 并不是必须的

【Django】ORM数据库操作

旧城冷巷雨未停 提交于 2019-11-26 05:51:14
Django-ORM数据库操作 映射关系:   表名 --------------------》类名   字段--------------------》属性   表记录-----------------》类实例化对象 ORM的两大功能:   操作表:     - 创建表     - 修改表     - 删除表   操作数据行:     - 增 删 改 查 ORM利用pymysql第三方工具链接数据库 Django默认的是sqlite数据库 将Django数据库修改为mysql: 1、settings.py 配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_orm', #你的数据库名称 'USER': 'root', #你的数据库用户名 'PASSWORD': 'root', #你的数据库密码 'HOST': '', #你的数据库主机,留空默认为localhost 'PORT': '3306', #你的数据库端口 } } 2、在项目文件夹下 __init__.py 导入pymysql 3、命令行中打印 SQL语句 ---> 配置在settings.py 中 LOGGING = { 'version': 1, 'disable_existing_loggers':

Trie Tree字典树(讲解+模板)

偶尔善良 提交于 2019-11-25 19:42:24
一、引入 字典是干啥的?查找字的。 字典树自然也是起查找作用的。查找的是啥?单词。 看以下几个题: 1、给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单词表中出现过。 答:简单!map,短小精悍。 好。下一个 2、给出n个单词和m个询问,每次询问一个前缀,回答询问是多少个单词的前缀。 答:map,把每个单词拆开。 judge:n<=200000,TLE! 这就需要一种高级数据结构——Trie树(字典树) 二、原理 在本篇文章中,假设所有单词都只由小写字母构成 对cat,cash,app,apple,aply,ok 建一颗字典树,建成之后如下图所示 由此可以看出: 1、字典树用边表示字母 2、有相同前缀的单词公用前缀节点,那我们可以的得出每个节点最多有26个子节点(在单词只包含小写字母的情况下) 3、整棵树的根节点是空的。为什么呢?便于插入和查找,这将会在后面解释。 4、每个单词结束的时候用一个特殊字符表示,图中用的‘′,那么从根节点到任意一个‘′,那么从根节点到任意一个‘’所经过的边的所有字母表示一个单词。 三、基本操作 A、insert,插入一个单词 1.思路 从图中可以直观看出,从左到右扫这个单词,如果字母在相应根节点下没有出现过,就插入这个字母;否则沿着字典树往下走,看单词的下一个字母。 这就产生一个问题:往哪儿插?计算机不会自己选择位置插