数组

Java Map

拥有回忆 提交于 2020-03-26 18:55:30
Map无论在Java编程或者面试中,都占用很重要的地位,这里试图聊聊相关的概念,看看是否能够理清楚相关的思路。 HashMap HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示: 新添加的元素通过取模的方式,定位 Table 数组位置,然后将元素加入链表头部,这样下次提取时就可以快速被访问到。 访问数据时,也是通过取模的方式,定位数组中的位置,然后再遍历链表,依次比较,获取相应的元素。 如果 HasMap 中元素过多时,可能导致某个位置上链表很长。原本 O(1) 查找性能,可能就退化成 O(N) ,严重降低查找效率。 为了避免这种情况,当 HasMap 元素数量满足以下条件时,将会自动扩容,重新分配元素。 1// size:HashMap 中实际元素数量 2//capacity:HashMap 容量,即 Table 数组长度,默认为:16 3//loadFactor:负载因子,默认为:0.75 4 size>=capacity*loadFactor HasMap 将会把容量扩充为原来的两倍,然后将原数组元素迁移至新数组。 1void transfer(Entry[] newTable, boolean rehash) { 2 int newCapacity = newTable.length; 3 for (Entry<K,V

连续子数组的最大和(基于动态规划)

泪湿孤枕 提交于 2020-03-26 12:06:41
题目   输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n) 。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。 思路 一般解法 从头到尾累加数字,保存到一个临时变量curr_sum中 如果前几项的和为负,则加上此和之后比本身的值还要小,抛弃原来所计算得到的和,curr_sum从本元素开始计数 ;否则,把当前元素累加到curr_sum 把curr_sum与最大值max_sum比较(max_sum保存每个连续数组的最大和) class Solution { public: int FindGreatestSumOfSubArray(vector<int> arr) { if(arr.size()==0) return 0; else if(arr.size()==1) return arr[0]; int curSum=arr[0]; int maxSum=-0x3f3f; for(int i=1;i<arr.size();++i) { if(curSum<0)//如果前几项的和为负,则加上此和之后比本身的值还要小,数组从本元素开始计数 curSum=arr[i]; else curSum+=arr[i];

7、群体类和群体数据的组织-2.线性群体

跟風遠走 提交于 2020-03-26 09:17:20
1、线性群体的概念 线性群体中的 元素次序与其位置关系 是对应的。在线性群体中,又 可按照访问元素的不同方法分 为直接访问、顺序访问和索引访问。 对可直接访问的线性群体,我们可以直接访问群体中的任何一个元素,而不必首先访问该元素之前的元素。 对顺序访问的线性群体,只能按元素的排列顺序从头开始依次访问各个元素。 还有两种特殊的线性群体--栈和队列。 2、直接访问群体---数组类 针对静态数组的缺陷,我们来 设计一个动态数组类模板Array ,它由任意多个位置连续的,类型相同的元素组成,其元素个数可在程序运行是改变。 a、数组类 数组类模板Aarray的 声明和实现 都在shuzu.h文件中,程序清单如下: #ifndef ARRAY_CLASS #define ARRAY_CLASS #include<iostream> #include<cstdlib> using namespace std; #ifndef NULL const int NULL=0; #endif //NULL //错误类型集合,共有三种类型的错误:数组大小错误、内存分配错误和下标越界 e num ErrorType { invalidArraySize,memoryAllocationError,indexOutOfRange }; //错误信息 char *errorMsg[] = { "Invalid

MongoDB 基础(2019年开篇)

自作多情 提交于 2020-03-26 08:52:32
MongoDB基础知识: 1、什么是MongoDB NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL"。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB是由C++编写的,MongoDB语法类似JS,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。 示例: { name: "wangchunwang", age: 26, groups: ["news", "sports"] } 假设上述文档所在的集合是testcoll,那么以下几种查询键值方法等效: > db.testcoll.findOne().name // 点链式访问 > db["test"].findOne()["name"] // 数组式访问 2、进入MongoDB Shell 在cmd中输入 > mongo [ip:port/database -u username -p] 查看当前操作的数据库:> db 显示所有数据库:> show dbs

javascript中的数组对象

主宰稳场 提交于 2020-03-26 04:48:27
3 月,跳不动了?>>> 1.定义 要了解数组对象,首先我们先要了解什么是数组。所谓数组,就是相同数据类型的元素,按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量集合,这个名字称为数组,编号称为下标。 首先我们要定义一个数组,但是如何去定义数组呢,在JavaScript中定义数组的方法很多,常用的四种方法如下所示: 方法一 : var array = new Array(); array[0] = 1; array[1] = 2; array[2] = 3; 方法二: var array = new Array(3); array[0] = 1; array[1] = 2; array[2] = 3; 方法三: var array = new Array(1,2,3); 方法四: var array = [1,2,3] 针对于上面的四种方法,大家常用的为方法四。 2.操作 定义好一个数组之后,我们要操作数组中的元素,我们应该如何去操作呢,比如说如何设置固定位置的元素的值,如何添加元素,如何移除元素呢。其实对于JavaScript对于数组的,也就是array 的操作的方法还是很简单的。 我们给Array中的固定位置的元素赋值,可以通过数组名和下标进行赋值,如下。 var a = new Array(4); a[0] = 1, a[1] = 2,

Enemy is weak 树状数组

谁说我不能喝 提交于 2020-03-26 04:13:07
来源: http://codeforces.com/problemset/problem/61/E 题意:给你一些数,让求满足i < j < k 且num[i] > num[j] > num[k]的序列的个数,而且已知每个数都是不同的。 思路:这是CF上的一道题,由题意很容易联想到逆序数。实际上就是这样,这道题就是和逆序数有关。假如所给的序列为10 8 3 1,那么我们求出每个数的后面比其小的有多少个,对于该序列来说的话为3,2,1,0。然后我们再求出每个数前面有几个比其大的,对于 该序列来说是0,1,2,3。现在我们把对应的比其小的数的个数和比其大的数的个数相乘再相加就是所求的答案。 现在问题来了,用什么求逆序数。由于最多有100万个数,因此普通的方法求逆序数肯定超时。对于很多数求逆序数,一般有两种方法,归并排序或者是用树状数组求。我是用树状数组求得逆序数。先来说一下什么是树状数组。 树状数组,顾名思义,就是一个数组,但是该数组和普通数组的区别在于,此数组是树状的。树状的含义就是含有节点,该结点所含有的信息和普通数组不同。我们先来考虑普通数组,num[1],num[2],num[3],,,普通数组里的每个元素所含的值就是其本身,而树状数组则不同。num1[1]所包含的元素是其自身,num1[2]所包含的元素是普通num[1]+num[2]的和,num1[3]所包含的元素是num

Java 基础 - 数组

a 夏天 提交于 2020-03-26 03:08:57
目录 初识数组 数组的初始化 定义数组变量 初始化 静态初始化 动态初始化 数组的访问 数组元素读取、赋值 数组的遍历 for 循环 foreach循环 深入了解数组 JDK 中的 Array 数组的内存分布 多维数组 数组是编程语言中最常见的一种数据结构,可以用于储存多个数据,通常可通过数组元素的索引来访问数组元素,包括数组元素赋值和取出数组元素的值. 初识数组 数组也是一种类型,属于引用数据类型. 数组元素的类型是唯一的,一个数组里只能存储一种类型的数据. 数组的长度是固定的,即一个数组一单初始化完成,数组在内存中所占的空间将被固定下来,长度不在发生改变.即使把某个数组的元素清空,其所占的空间依然被保留. 数组的初始化 定义数组变量 Java支持两种语法格式定义数组: type[] arr; type arr[]; 对于这两种定义而言,通常使用第一种格式来定义数组,因为第一种有更好的语义.第二种容易和变量名混淆 初始化 Java 数组只有初始化之后才能使用,所谓的初始化,就是为数组的元素分配内存空间.并为每个数组元素赋初始值. 静态初始化 由程序员显示的指定每个数组原始的初始值.由系统决定数组的长度. 静态初始化的语法格式为: type[] arr = new type[]{item1, item2, item3,...}; type 为数组元素的数据类型, 数组元素类型必须为

JavaScript引用类型之Array数组的排序方法

点点圈 提交于 2020-03-26 02:33:17
数组中已经存在两个JavaScript给我们定义好的重排序的方法:reverse()和sort()方法,下面来简单分析下: 1、reverse() 用于反转数组项的顺序,代码如下: <script> var colors=[1,2,3,4,5]; colors.reverse(); alert(colors.toString()); //输出:5,4,3,2,1 </script> 这里数组的初始顺序是1、2、3、4、5,调用数组的reverse()方法后,其值顺序变为5、4、3、2、1 2、sort() 用法:arrayobj.sort(sortfunction) 参数说明: (1)arrayObj 必选项,任意 Array 实例。 (2)sortFunction 可选项,是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。 注意:sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。 如果为 sortfunction 参数提供了一个函数,那么该函数必须为下列返回值之一: 负值,如果所传递的第一个参数比第二个参数小。 零,如果两个参数相等。 正值,如果第一个参数比第二个参数大。 没有给sort()方法指定排序规则的代码如下: <script> //使用方法:arrayobj.sort

js 数组 数组 最大值、最小值 算法(转载)

ぃ、小莉子 提交于 2020-03-26 02:31:34
一:https://www.cnblogs.com/zhouyangla/p/8482010.html 1.排序法 首先我们给数组进行排序,可以按照从小到大的顺序来排,排序之后的数组中第一个和最后一个就是我们想要获取的最小值和最大值。 排序我们会用到数组的 sort 方法。 var arr = [12,56,25,5,82,51,22]; arr.sort(function (a, b) { return a-b; }); // [5,12,22,25,51,56] var min = arr[0]; // 5 var max = arr[arr.length - 1]; // 56 2.假设法 假设当前数组中的第一个值是最大值,然后拿这个最大值和后面的项逐一比较,如果后面的某一个值比假设的值还大,说明假设错了,我们把假设的值进行替换。最后得到的结果就是我们想要的。 // 获取最大值: var arr = [22,13,6,55,30]; var max = arr[0]; for(var i = 1; i < arr.length; i++) { var cur = arr[i]; cur > max ? max = cur : null } console.log(max); // 55 // 获取最小值: var arr = [22,13,6,55,30]; var min

后缀数组

為{幸葍}努か 提交于 2020-03-26 02:19:45
前一段时间看了后缀数组,也是对着大佬们的博客研究了半天,有几个点理解了好久才明白(这就是弱者的世界吗_(:з」∠)_,再加上后来敲题时也遇到了一些坑,正好今天有时间所以写个博客来记录一下吧,方便日后写bug时查阅 本文算是自己的一篇简略的小笔记吧,如果想正经学习的话建议去看大佬们的博客哦,附上一个写的很好的链接: https://blog.csdn.net/yxuanwkeith/article/details/50636898 后缀数组求出来两个数组 sa[i] 和 rank[i] , sa[i] 表示按字典序排序排名第i的后缀的起始位置下标, rank[i] 表示以第i位为起始位置的后缀的排名,两者互逆,还有一个神奇的数组 height[i] 它表示的是排名第i的后缀和排名第i-1的后缀的LCP,有了这三个数组就可以解决大部分问题了 求法的话就是利用倍增(还有一个更优秀的DC3算法,但是好像很复杂的样子就没有看_(:з」∠)_ 首先要注意的一点就是该算法涉及的数组最好都以下标为1作为数组的第一位也就是起始位, (鬼知道为什么我敲第一道题的时候以0为起始位置怎么改怎么wa,第二天以1为起始位置重新敲了一遍就莫名其妙的a了... 实现原理概述:用 str 来表示整个字符串,我们先处理每个长度为1的子串 str[i] 对应的 sa 、 rank 的信息,然后利用 str[i] 和