数组公式

深入分析HashMap

て烟熏妆下的殇ゞ 提交于 2019-11-30 01:47:28
每个学生都有学号、姓名、年龄、身高等信息,其中学号是学生的唯一标识,要把学生存储起来,并可以通过学号快速查找。 我们很自然的想到数组( 数组支持按照下标随机访问,时间复杂度O(1) ),将这些学生的信息放到数组里,但是我们又怎么通过学号从数组里查找到该学生的信息呢? 如果可以把学号映射到数组里的一个索引位置,这样我们就可以根据学号找到索引位置,进而查到学生的信息。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 散列函数 下面的hash函数用key的哈希码值对数组大小取余,来锁定数组的位置。 // 哈希函数必须把关键字的范围压缩到数组的范围,用取余操作来完成 public int hashFunc(String key) { return key.hashCode() % arraySize; // hash function } 散列冲突 如果不同的key经过hash函数,命中了数组的同一个索引位置,那怎么办? 再好的hash函数也无法避免散列冲突,常用的散列冲突解决方案有开放地址法和链地址法。 开放地址法 开放地址法的思想就是当前索引有冲突了,那么我就根据一定的规则找到其他空闲的索引位置。最简单的方式就是,每次当前索引+步长(比如1),向下查找,直到找到空闲的位置,当然也可以每次hash的时候改变步长。查找的时候也是每次当前索引+步长(比如1),向下查找,直到遇到空闲位置

javascript-ECMAScript

余生颓废 提交于 2019-11-30 00:53:05
javascript介绍 Web前端有三层: HTML:从语义的角度,描述页面 结构 CSS:从审美的角度,描述 样式 (美化页面) JavaScript:从交互的角度,描述 行为 (提升用户体验) 其中JavaScript基础又分为三个部分: ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。 DOM:文档对象模型,操作网页上的元素的API。比如让盒子移动、变色、轮播图等。 BOM:浏览器对象模型,操作浏览器部分功能的API。比如让浏览器自动滚动。 JavaScript历史背景介绍 布兰登 • 艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。 一开始JavaScript叫做LiveScript,但是由于当时Java这个语言特别火,所以为了傍大牌,就改名为JavaScript。如同“北大”和“北大青鸟”的关系。“北大青鸟”就是傍“北大”大牌。 同时期还有其他的网页语言,比如VBScript、JScript等等,但是后来都被JavaScript打败了,所以现在的浏览器中,只运行一种脚本语言就是JavaScript ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers

Markdown公式用法大全

余生长醉 提交于 2019-11-29 18:18:34
目录 基本语法 如何插入公式 如何输入上下标 如何输入括号和分隔符 如何输入分数 如何输入开方 如何输入省略号 如何输入矢量 如何输入积分 如何输入极限运算 如何输入累加、累乘运算 如何输入希腊字母 如何输入其它特殊字符 如何进行字体转换 如何使用大括号和行标 其它公式 如何使用矩阵 如何输入一个方程式序列 如何使用条件表达式 如何使用数组或表格 如何输入连分式 如何输入一个交换图表 注意事项 基本语法 Markdown是一种轻量级标记语言,下载地址:https://www.typora.io/ # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 **加粗** *斜体* ==高亮== 两种代码引用方式 ``式或```式 插入链接并描述 [博客](https://www.cnblogs.com/ "博客") 插入图片 ![路飞](https://pic.baike.soso.com/ugc/baikepic2/0/ori-20190529230042-1249666563_jpeg_640_960_59726.jpg/800 '路飞') 有序列表 1.one 2.two 3.three 无序列表 * one * two * three 分割线 --- 表格 name | age | sex :-: | :- | -:

算法理论(一)动态规划

你离开我真会死。 提交于 2019-11-29 17:34:19
一.前言   周末果然是堕落的根源,原谅我两天没刷题(PS:主要是因为周末搬家去了)。上次在这个题的时候,看到网上很多方法都是用动态规划做的,但是本渣渣实在不知道动态规划具体是怎样的,于是就专门花了花时间去研究了一下。肯定没这么快弄懂,只能说是稍微入门,于是写下这篇文章,帮助自己也帮助别人理解动态规划。 二.理论部分   动态规划是什么呢? 百度百科上的定义是:动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。用通俗的话来讲,动态规划是针对与 某一类问题 的解决方法。只要我们弄清楚了某一类问题是什么,那我们就知道什么是动态规划。   首先,我们举一个简单的例子,也是dp的入门经典问题:如果我们有面值为1元、5元和11元的纸币若干枚,如何用最少的纸币凑够12元?   按照人类的正常思维来说,首先我们会尽可能的使用大面值的纸币,所以会得出 12 = 11 x 1 + 1 x 1,最少使用两张纸币。这样一看好像这种方法没什么问题,可是当我们把问题换成凑够15元时,继续按照上面这种思路,我们会得到 15 = 11 x 1 + 1 x 4,也就是说,按照惯性思路,我们会认为最少需要五张纸币才能凑齐15元。但是我们可以轻易的看出,15 = 5 x 3,最少只需要三张纸币就能够凑齐15元

Markdown最全公式用法

醉酒当歌 提交于 2019-11-29 17:10:36
目录 基本语法 如何插入公式 如何输入上下标 如何输入括号和分隔符 如何输入分数 如何输入开方 如何输入省略号 如何输入矢量 如何输入积分 如何输入极限运算 如何输入累加、累乘运算 如何输入希腊字母 如何输入其它特殊字符 如何进行字体转换 如何使用大括号和行标 其它公式 如何使用矩阵 如何输入一个方程式序列 如何使用条件表达式 如何使用数组或表格 如何输入连分式 如何输入一个交换图表 注意事项 基本语法 Markdown是一种轻量级标记语言,下载地址:https://www.typora.io/ # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 **加粗** *斜体* ==高亮== 两种代码引用方式 ``式或```式 插入链接并描述 [博客](https://www.cnblogs.com/ "博客") 插入图片 ![路飞](https://pic.baike.soso.com/ugc/baikepic2/0/ori-20190529230042-1249666563_jpeg_640_960_59726.jpg/800 '路飞') 有序列表 1.one 2.two 3.three 无序列表 * one * two * three 分割线 --- 表格 name | age | sex :-: | :- | -:

关于java中split的使用

一笑奈何 提交于 2019-11-29 16:09:26
之前在 http://shukuiyan.iteye.com/blog/507915 文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊。题目大概是这样的: Java代码 String s2="this is a test"; String sarray[]=s2.split("/s"); System.out.println("sarray.length="+sarray.length); 这个输出是什么还是编译出错?我想那个split方法中的参数要是"s"的话,输出一定是4了,就是将原来字符串分成了数组{"thi","i","a te","t"},但是原题split方法中的参数要是"/s",那么这个参数到底是嘛意思呢,实验后输出结果居然是1。 原因还得深究啊。 java.lang.string.split,即split 方法,它实现的功能是将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 格式为: stringObj.split([separator,[limit]]) 其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator 为可选项,表示字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项

leetcode刷题记录---19.9.13

北战南征 提交于 2019-11-29 13:24:44
概述 1.数组中的第k个最大元素,利用快排的partition思想,加上二分检索 2.比特位计数,直观的方法时间复杂度为o(n*sizeof(int)),有效降低时间复杂度的方法是判断当前数字的奇偶性,再与前一个联系,得出结论。 3.最长上升子序列,动态规划o(n^2),贪心+二分o(nlogn)。维护一个数组,新进来的如果比数组最后的大,插在后面,否则找到第一个比新进来的大的元素,替换掉他。这个查找是属于有序数组中的查找,可以采用折半查找。 4.根据身高重建队列,这题先根据身高和人数排序(用到了sort的复杂排序,自定义排序规则)。然后再根据人数往数组中的合适位置插。 5.寻找重复数,o(logn)使用二分查找,判断左右数字出现的个数。 6.环形链表,查找链表的环的入口。两种方法unordered_set和快慢指针。快慢指针主要是推导公式,证明,为什么A = (n-1)(B+C)+C 1. 数组中第k个最大元素 ,一遍过,莫名其妙 题目描述:给定一个无序数组,找出这个数组中第k大的数字。 思路:快排的Partition函数 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 class Solution { public: void swap(int& a,int& b

十分钟弄懂:数据结构与算法之美 - 时间和空间复杂度

两盒软妹~` 提交于 2019-11-29 07:49:55
复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半了。 1. 什么是复杂度分析 ? 数据结构和算法解决是 “如何让计算机更快时间、更省空间的解决问题”。 因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。 分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。 2. 为什么要进行复杂度分析 ? 和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。 掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。 3. 如何进行复杂度分析 ? 3.1 大 O 表示法 算法的执行时间与每行代码的执行次数成正比,用 T(n) = O(f(n)) 表示,其中 T(n) 表示算法执行总时间,f(n) 表示每行代码执行总次数,而 n 往往表示数据的规模。这就是大 O 时间复杂度表示法。 3.2 时间复杂度 1)定义 算法的时间复杂度,也就是算法的时间量度。 大 O 时间复杂度表示法 实际上并不具体表示代码真正的执行时间,而是表示 代码执行时间随数据规模增长的变化趋势 ,所以也叫 渐进时间复杂度 ,简称 时间复杂度 (asymptotic time complexity)。 例子1: function aFun() {

leetcode难题

扶醉桌前 提交于 2019-11-29 03:26:37
4 寻找两个有序数组的中位数 35.9% 困难 10 正则表达式匹配 24.6% 困难 23 合并K个排序链表 47.4% 困难 25 K 个一组翻转链表 54.1% 困难 30 串联所有单词的子串 27.7% 困难 32 最长有效括号 28.1% 困难 37 解数独 56.0% 困难 41 缺失的第一个正数 36.3% 困难 42 接雨水 46.1% 困难 44 通配符匹配 24.8% 困难 45 跳跃游戏 II 31.3% 困难 51 N皇后 64.8% 困难 52 N皇后 II 75.2% 困难 57 插入区间 35.1% 困难 65 有效数字 16.0% 困难 68 文本左右对齐 40.8% 困难 72 编辑距离 54.1% 困难 76 最小覆盖子串 36.1% 困难 84 柱状图中最大的矩形 37.4% 困难 85 最大矩形 42.6% 困难 87 扰乱字符串 43.4% 困难 97 交错字符串 36.3% 困难 99 恢复二叉搜索树 54.7% 困难 115 不同的子序列 44.4% 困难 123 买卖股票的最佳时机 III 39.2% 困难 124 二叉树中的最大路径和 37.5% 困难 126 单词接龙 II 28.1% 困难 128 最长连续序列 46.6% 困难 132 分割回文串 II 40.1% 困难 135 分发糖果 41.1% 困难 140 单词拆分

统计-stats

为君一笑 提交于 2019-11-29 02:04:44
统计-stats SciPy的stats模块包含了多种概率分布的随机变量 [1] ,随机变量分为连续和离散两种。所有的连续随机变量都是rv_continuous的派生类的对象,而所有的离散随机变量都是rv_discrete的派生类的对象。 Footnotes [1] 本节中的随机变量是指概率论中的概念,不是Python中的变量 连续和离散概率分布 可以使用下面的语句获得stats模块中所有的连续随机变量: >>> from scipy import stats >>> [k for k,v in stats.__dict__.items() if isinstance(v, stats.rv_continuous)] ['genhalflogistic','triang','rayleigh','betaprime', ...] 连续随机变量对象都有如下方法: rvs:对随机变量进行随机取值,可以通过size参数指定输出的数组的大小。 pdf:随机变量的概率密度函数。 cdf:随机变量的累积分布函数,它是概率密度函数的积分。 sf:随机变量的生存函数,它的值是1-cdf(t)。 ppf:累积分布函数的反函数。 stat:计算随机变量的期望值和方差。 fit:对一组随机取样进行拟合,找出最适合取样数据的概率密度函数的系数。 03-scipy/scipy_stats.py 概率密度函数