数组公式

数据结构--循环队列

穿精又带淫゛_ 提交于 2019-11-29 01:00:26
一.顺序队列的改进 队列元素的出列是在队头,即下标为0的位置,那也就意味着, 队列 中的所有元素都得向前移动,以保证队列的队头(也就是下标为0的位置)不为空,此时的时间复杂度为0(n)。 可有时想想,为什么出队列时一定要全部移动呢,如果不去限制队列的元素必须存储在数组的前n个单元这一条件,出队的性能就会大大增加。也就是说,队头不需要一定在下标为0的位置,比如也可以是a[1]等。 而为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,引入两个指针,front指针指向队头元素,rear指针指向队尾元素的下一个位置,这样当front等于rear时,此队列不是还剩一个元素,而是空队列。 对于队列 最好的方法是使用链表实现 ,因为对于数组来说,队列可能会出现下面这种情况: 假设是长度为5的数组,初始状态,空队列如所示,front与 rear指针均指向下标为0的位置。然后入队a1、a2、a3、a4, front指针依然指向下标为0位置,而rear指针指向下标为4的位置。 出队a1、a2,则front指针指向下标为2的位置,rear不变,如下图所示,再入队a5,此时front指针不变,rear指针移动到数组之外。嗯?数组之外,那将是哪里? 问题还不止于此。假设这个队列的总个数不超过5个,但目前如果接着入队的话,因数组末尾元素已经占用,再向后加,就会产生数组越界的错误,可实际上

京东电面

。_饼干妹妹 提交于 2019-11-29 00:38:42
推荐算法FM、DeepFM、XDeepFM 两个算法题: (1)数组长度99,每个元素值1-100,如何找到1-100中哪个值没有出现? 答:通过交换,将元素1放在索引为0的位置,元素2放在索引为1的位置。。。依次类推。 问:有没有更优的解法 答:每个元素值1-100,通过1-100求和数组求和就是缺失值。 (2)求a n 的n次方? 答:两种解法,第一种是减治法,如果n==0,返回1,如果n==1,返回a,如果n是偶数,a n =(a n/2 ) 2 ,如果n是奇数,a n =(a n-1/2 ) 2 第二种解法,动态规划,分配数组array长度为n//2 +1,arra[0]=1,array[1]=a,递推公式:如果n是偶数,a[n]=(a[n/2]) 2 ,如果n是奇数,a[n]=(a[(n-1)/2]) 2 ,所以只需要求出a[n//2]即可解出a[n], 即分配数组长度为n/2 + 1。 l1和l2正则化的对比,梯度下降和牛顿法,LR,GBDT和XGBOOST,线程和进程,rnn,cnn,lstm,激活函数,relu的优点,面向对象,装饰器,决策树,如何解决过拟合 来源: https://www.cnblogs.com/zcAI/p/11436616.html

Java数组定义及方法

微笑、不失礼 提交于 2019-11-29 00:19:02
数组的描述   在 数组 中每个元素都具有相同的数据类型,是 有序数据 的集合。通俗的说数组就相当于一个 容器 。数组分为一维数组、二维数组和多维数组。 数组的特点: 数组类型是从抽象基类 Array 派生的引用类型。 数值数组元素的默认值为 0,而引用元素的默认值为 null。 数组中存放元素的类型必须与创建数组时声明的类型相一致。 数组的类型可以是 任意数据类型 ,包括基本数据类型和引用数据类型,如String[]、int[] 、float[]… 数组的索引是从0开始的,如果数组有n个元素,那么它的最大索引为n-1,(数组索引的取值范围 [0,n-1] )。 数组的创建及赋值 一维数组的创建及赋值 一维数组内存格式(如下图): 动态创建数组(如下): /* 数据类型[] 数组名; //(建议使用) * 数组名 = new 数组类型[数组长度]; */ String[] str; str = new String[10]; str[2] = "Hello"; /* 或 * 数据类型 数组名[]; * 数组名 = new 数组类型[数组长度]; */ String str1[]; str1 = new String[10]; // 数组名[索引下标] = 元素值; str1[2] = "Hello"; /* * 元素类型[] 数组名 = new 元素类型[数组长度];

Java实现约瑟夫环问题

烈酒焚心 提交于 2019-11-28 19:25:25
有朋友去浦发面试,因为我们是相同岗位,为了查漏补缺,便问了一下他们的机试题目。 机试考3道编程,前两道很水,最后一道他说有点麻烦,没有AC。我自己也尝试着码了一下,然后发现还是得需要耐心。 在此,我列出了三种方法,以供大家参考。 其中包括标号从0 开始的(0....(N-1)),和标号从1开始的(1....N))两个版本。 先简单说一下我的思路,前两种方法就是模拟整个过程: 1. 标号从1开始: 用动态数组存储数据,一个大循环就是数组不为空;然后利用 target = (target + k)%list.size(); 求出数组下标,对list.size()取模是为了不让target越界;那么得到的target的范围就是【0,list.size()】,然后就打印 list.get(target-1) ,所以,为了不越界,需要判断 target!=0 ,然后,再将该元素移除 list.remove(target-1); ,最后再将下标自减1(关于为什么将下标再减一,下面第2种方法中有解释)。如果 target==0 的话,那么就打印数组中最后一位 list.get(list.size()-1) ,然后再移除该元素即可。 代码如下: private static void lastPeople(int total, int k) { //初始化人数,人数排号从1开始; List

numpy学习笔记

ε祈祈猫儿з 提交于 2019-11-28 15:35:11
Numpy 的核心是 ndarray 对象,这个对象封装了同质数据类型的n维数组。(数组,即为有序的元素序列) numpy约定俗成的导入方式:   import numpy as np 基本的 ndarray 是使用 NumPy 中的数组函数创建的,如下所示:   array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0) numpy的ndarray 与 python原生array有什么区别:   NumPy 数组在创建时有固定的大小,不同于Python列表(可以动态增长)。更改ndarray的大小将创建一个新的数组并删除原始数据。   NumPy 数组中的元素都需要具有相同的数据类型,因此在存储器中将具有相同的大小。数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。 常用数组:np.zeros() #全0数组 默认float型      np.ones() #全1数组 默认float型      np.full(形状,x) #全为相同值的数组      np.eye() #单位矩阵 默认float型      np.ones_like(a)、np.zeros_like(a)、np.full_like(a,x)

链表

妖精的绣舞 提交于 2019-11-28 13:02:27
开篇问题 问题:如何用链表来实现 LRU 缓存淘汰策略呢? 链表的作用 链表一个经典的应用场景就是 LRU 缓存淘汰算法; 缓存是一种提高数据读取性能的技术,在开发中有着非常广泛的应用,由于缓存的大小有限,当缓存被占满时,哪些数据应该被清理,哪些数据应该被保留?这就需要淘汰策略来决定,常见的淘汰策略有三种:先进先出策略FIFO(First In, First Out)、最少使用策略LFU(Least Frequently Used)、最近最少使用策略LRU(Least Recently Used)。 打个比方:假如说你买了很多书籍,但有一天发现书太多了,太占空间,你要做个大扫除。那么这个时候你会选择扔掉哪些书籍?对应一下,其实就是我们上边说的三种策略; 什么是链表? 为了理解起来更容易,我们拿数组来做对比; 相比数组,链表是一种稍微复杂一点的数据结构。从底层的存储结构上来看:数组需要一块儿连续的内存空间,堆内存的要求比较高,如果我们申请一个100MB大小的数组,当内存中没有连续的、足够大的空间的时候,即便内存的剩余总可用空间大于100MB,仍然会申请失败;而链表恰恰相反,它并不需要一块儿连续的内存空间,它通过“指针”将一组零散的内存块串联起来,所以如果我们申请100MB大小的链表,如果没有100MB连续的内存空间,且内存的剩余总可用空间大于100MB,根本不会有问题;

前端知识点

和自甴很熟 提交于 2019-11-28 10:45:49
1.基本类型和引用类型 基本类型: Number, String, Null, Undefined, Boolean, Symbol(ES6数据类型) 引用类型: Object、Array、RegExp、Date、Function、单体内置对象(Global、Math) 区别:基本类型,操作和保存在变量的实际的值(保存在栈区);引用类型,值指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值,所以操作的是对象的引用(引用存放在栈区,实际对象保存在堆区)。 1.1 类型检测 使用 typeof 进行基本类型检测,使用 instanceof 检测对象还是数组 类型 结果 Undefined "undefined" Null "object" Boolean "boolean" Number "number" String "string" Symbol(ECMAScript 6 新增) "symbol" 函数对象 "function" 任何其他对象 "object" 检测数组和对象:(Array其实是Object 的子类) var a = []; console.log(a instanceof Array); // true console.log(a instanceof Object); // true var a = {}; console.log(a

《Effective Java第二版》总结

一世执手 提交于 2019-11-28 07:14:21
第1条:考虑用静态工厂方法代替构造器 通常我们会使用 构造方法 来实例化一个对象,例如: // 对象定义 public class Student{ // 姓名 private String name; // 性别 private String sex; public Student(String name,String sex){ this.name = name; this.sex = sex; } } // 实例化对象 Student student = neew Student("MarkLogZhu","男"); 然后我们采用 静态工厂方法 实例化对象: // 对象定义 public class Student{ // 姓名 private String name; // 性别 private String sex; private Student(String name,String sex){ this.name = name; this.sex = sex; } public static Student getMaleStudent(String name){ return new Student(name,"男"); } } // 实例化对象 Student student = Student.getMaleStudent("MarkLogZhu");

HashMap三百问

喜你入骨 提交于 2019-11-28 06:13:37
文章目录: 一、JDK1.7之HashMap 二、JDK1.8之HashMap 三、Hashtable JDK1.7之HashMap 1. 定义 HashMap实现了Map接口,继承AbstractMap。其中Map接口定义了键映射到值的规则,源码如下: 1 public class HashMap<K,V> 2 extends AbstractMap<K,V> 3 implements Map<K,V>, Cloneable, Serializable HashMap是一种支持 快速存取 的数据结构。 2. 构造函数 HashMap提供了三个构造函数: HashMap():构造一个具有默认 初始容量 (16) 和 默认加载因子 (0.75) 的空 HashMap。 HashMap(int initialCapacity):构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。 HashMap(int initialCapacity, float loadFactor):构造一个带指定初始容量和加载因子的空 HashMap。 在这里提到了两个参数:初始容量,加载因子。这两个参数是影响HashMap性能的重要参数,其中容量表示哈希表中桶的数量,初始容量是创建哈希表时的容量,加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度

面试题解答系列:算法连载之求解两个有序数组的中位数

依然范特西╮ 提交于 2019-11-28 06:09:18
问题 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。找出这两个有序数组的中位数。假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2. 合并两个有序数组来获得中位数 1、先将两个有序数组合并为一个有序数组 2、再获取中位数 偶数情况中位数索引分别为:(m+n)/2-1,(m+n)/2。将二值求平均数。 计数情况中为数索引为:(m+n)/2 时间复杂度是O(m+n),空间复杂度是O(m+n)。 优化第一个求解方法 上一个算法是将两个有序数组合并为一个有序数组再计算中位数位置。我们可以先计算中位数位置,将两个有序数组元素逐一比较排序过程中,当索引位置到达中位数时停止。 时间复杂度是O((m+n)/2+1)=O(m+n),空间复杂度是((m+n)/2+1)=O(m+n)。 二分查找 一个有序数组的中位数 长度为偶数: 数组a,索引位置初始为0,长度为m。索引 i 将有序数组划分为左右两个长度相等的部分,i = (m - 0) / 2 且必须满足如下两个条件: 1、length(a[0, i)) = length(a[i, m)) 2、a[i-1] <= a[i] 则中位数是