数组

优先队列&最大堆

半腔热情 提交于 2020-03-16 20:21:21
1. 采用什么数据结构存储 普通非顺序线性结构 添加数据 O(1) 获取元素 O(n) 利用树形结构,实现一个堆 父元素比左右子树元素的值都大 堆的节点层次不能决定他的大小(不一定层次越低值越大)、 最大堆是一个完全二叉树 2.最大堆的实现-数组 用数组实现可以不使用0号位置 parentIdex = i / 2 leftChild = i / 2 rightChild = i / 2 + 1 2.1 利用自定义数组实现存储 此处可替换为原生数组 public class MaxHeap < E extends Comparable < E > > { private Array < E > data ; public MaxHeap ( int capacity ) { data = new Array < > ( capacity ) ; } public MaxHeap ( ) { data = new Array < > ( ) ; } // 返回堆中的元素个数 public int size ( ) { return data . getSize ( ) ; } // 返回一个布尔值, 表示堆中是否为空 public boolean isEmpty ( ) { return data . isEmpty ( ) ; } // 返回完全二叉树的数组表示中

CodeForces - 1324 D. Pair of Topics 思维+多解法

人走茶凉 提交于 2020-03-16 20:08:32
CodeForces - 1324 D. Pair of Topics 原题地址: http://codeforces.com/contest/1324/problem/D 基本题意: 给你一个数组,找符合(i < j)ai + aj > bi + bj 的序列对的数量。 基本思路: 本质上我们设 ci = ai - bi 那么原式可以换为 ci + cj > 0,所以我们可以有几个思路: pbds黑科技解法,我们转换为 cj > -ci 直接上红黑树每次插入 -ci 暴力往前找rank; # include <bits/stdc++.h> # include <bits/extc++.h> using namespace std ; using namespace __gnu_pbds ; # define IO std::ios::sync_with_stdio(false) # define ll long long # define INF 0x3f3f3f3f typedef tree < pair < int , int > , null_type , less < > , rb_tree_tag , tree_order_statistics_node_update > rbtree ; const int maxn = 2e5 + 10 ; int n , a [

Python数据分析numpy(1)

烂漫一生 提交于 2020-03-16 19:01:12
某厂面试归来,发现自己落伍了!>>> Python开源的科学计算基础库 1.表示N维数组对象ndarray 2.线性代数、傅里叶变换、随机数生成 3.广播函数,整合c++、c 一.数据的维度 1.数据 2.数据维度 3.一维数据 (1)特点 (2)Python中的表达方式 列表、集合类型 (3)列表和数组的区别 数据类型要求不一样 4.二维数据 (1)概念,多个一位数据组成,一个以为数据的组合。 (2)列表 5.多维数据 (1) (2)列表 6.高维数据 (1)仅利用最基本的二元关系展示数据间的复杂关系 (2)字典类型或者数据表示格式 二.numpy库中的N维数组对象ndarray 1.使用numpy数组原因: (1)节省空间 (2)numpy的底层实现靠c语言实现的,提高运行速度。 代码示例: 2.N维数组对象-ndarray (1)组成 实际的数据 描述这些数据的元数据(数据维度、数据类型等) 轴、秩 方法 功能 .ndim 轴 .shape 秩 .size 元素个数 .dtype 数据类型 .itemsize 元素所占的字节 import numpy as np a=np.array([[0,1,2,3,4],[9,8,7,6,5]])# -*- coding: utf-8 -*- print(a.ndim) print(a.shape) print(a.size)

旋转数组的最小数字

北城以北 提交于 2020-03-16 17:46:22
某厂面试归来,发现自己落伍了!>>> Q: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 A1: 遍历数组; A2: 二分查找的变形,旋转数组的首元素肯定不小于旋转数组的尾元素,找一个中间点,如果中间点比首元素大,说明最小数字在中间点后面,如果中间点比尾元素小,说明最小数字在中间点前面。然后循环。 但是在一次循环中,首元素小于尾元素,说明该数组是排序的,首元素就是最小数字,如果出现首元素、尾元素、中间值三者相等,则只能在此区域中顺序查找。 A3: 使用 min(list) A1: 遍历数组 # -*- coding:utf-8 -*- class Solution: def minNumberInRotateArray(self, rotateArray): # write code here if not rotateArray: return None result = rotateArray[0] for item in rotateArray: if item < result: result = item return result if _

ES6入门教程---数值扩展和数组扩展

好久不见. 提交于 2020-03-16 14:29:31
1.数值扩展 var num = 0b11; console.log(num);3 var num = 0o11;console.log(num);9 var num = 1.234; console.log(Math.trunc(num))//干掉小数点 console.log(Math.sign(-0));//判断参数是正数、负数、正0还是负0 console.log(Math.hypot(3,4))//返回所有参数的平方和的平方根(勾股定理) 2.数组扩展 var str = 'xuniannian'; var arr = Array.from(str);//把类数组转成真正的数组。 console.log(arr); var arr = Array.of(1,2,3,4,5);//Array.of()方法用于将一组参数,转换为数组。 console.log(arr); var arr = new Array(5); console.log(arr.length) var arr = []; arr.find() 找出第一个符合条件的数组元素 参数: 1、回调函数 2、回调函数内this的指向 遍历整个数组,遍历过程中调用回调函数,如果回调函数的返回值为true,则返回当前正在遍历的元素。 如果所有元素都不符合条件则返回undefined arr.findIndex()

numpy创建二维数组

送分小仙女□ 提交于 2020-03-16 12:25:05
(一)直接创建 d=np.array([[10,11,12],[20,21,22],[30,31,32]]) (二)创建元组递增数组 d=np.arange(20).reshape(5,4) (三)创建指定范围的递增数组 d=np.arange(10,20).reshape(5,2) (四)创建随机整数元素的数组 d=np.random.randint(10,99,size=(4,3)) 4行3列,每个元素是从10~(99-1)之间的随机数 (五)创建全0数组 d=np.zeros((4,3)) (六)根据已有数组结构创建全0数组 d1 已有数组 d=np.zeros_like(d1) (七)创建全1数组 d=np.ones((4,3)) 或者 d=np.ones_like(d1) (八)创建相同元素的数组 d=np.ones((4,3))*20 (九)其它 d=np.linspace(10,20,20).reshape(4,5) 从10到20之间,平均分布生成20组数据,生成4行5列数组 来源: https://www.cnblogs.com/jm7612/p/12502833.html

List集合框架

独自空忆成欢 提交于 2020-03-16 09:53:33
Vector和ArrayList以及LinkedList区别和联系,以及分别的应用场景? 1:Vector Vector的底层的实现其实是一个数组 protected Object[] elementData; 他是线程安全的,为什么呢? 由于经常使用的add()方法的源码添加 synchronized ,所以说他是一个 同步方法 ,就连不会对数据结构进行修改的get()方法上也加了synchronized public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; } 如果不手动指定它的容量的话,它默认的容量是10 /** * Constructs an empty vector so that its internal data array * has size {@code 10} and its standard capacity increment is * zero. */ public Vector() { this(10); } 2.LinkedList LinkedList的底层其实是一个 双向链表 ,每一个对象都是一个Node节点

java基础语法2

妖精的绣舞 提交于 2020-03-16 08:50:35
一:运算符和表达式 1.表达式 表达式是由常量变量对象方法调用和操作符组成的式子。根据运算符的不同,表达式相应的分为下面几种: 算数表达式、关系表达式、逻辑表达式、赋值表达式 ,这些都属于数值表达式。 2.运算符 •算术运算符 进行基本的算数运算,如加法、减法、乘法、除法,在字符串中,‘+’可以作为连接符 n++ :先执行一次操作,再对n进行加1运算 ++n :先对n进行加1运算,再执行一次操作 •赋值运算符 = 格式 :变量 = 表达式;从右往左进行运算 •关系运算符 :判断数据的大小,比较的结果是布尔值 'A' > 'B' 的结果是false,这时比较的是两个字符的ASCII值 •逻辑运算符 : &与 、|或、!非 , 用来连接一个或多个条件,判断这些条件是否成立,其运算数都是 布尔类型 && 与 || :又叫做短路运算符,如果第一个表达式的值就可以决定表达式最后的结果,预算符右边的表达式就不需要进行运算了 •条件运算符 : 格式:布尔表达式?表达式1: 表达式2 布尔表达式的值为true时,返回表达式1的值,否则返回表达式2的值 •位运算符 &(与)、|(或)、 ^(异或)、<<(左移)、>>(右移)、>>>(无符号右移)、~(取反) 注意:位运算针对的是整数,运算的是数据的补码 可以利用&来判断是否是奇偶数。 运算符的优先级: 二:流程控制 顺序结构,选择结构

C# 获取图片的EXIF 信息

若如初见. 提交于 2020-03-16 06:37:25
C# 获取图片的EXIF 信息 分类: 自创 2010-04-10 12:48 1793人阅读 评论 (8) 收藏 举报 c# string byte image 制造 算法 关于 EXIF 信息的介绍。 1 EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式,只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在jpg文件的头部,也就是说EXIF信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。不管是硬件厂商的配套软件还是专业名门的看图工具,所有这些软件都是为了方便数码摄影者能更方便地保存查看摄影图像的重要信息。 2 如何获取EXIF信息 在.NET中,我们可以用PropertyItem对象来获取jpg 图片的EXIF信息。取得PropertyItem很简单。 Image img = Image.FromFile("支持Exif的图片文件路径"); PropertyItem[] pt = img.PropertyItems; 这样就可以了,Exif信息都已载入到PropertyItem数组中了。其中PropertyItem的ID

js call()与 apply()

五迷三道 提交于 2020-03-16 06:35:15
1 定义 call 方法 语法:call(thisObj,参数1,参数2,。。。参数n)。参数为当前函数的参数 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 apply方法 语法:call(thisObj,[参数1,参数2,。。。参数n]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 区别:apply方法将所有参数放在一个数组上。数组可换为arguments 2.常用实例 1)普通函数 function a(x,y){   return x-y; } function b(x,y){   return x+y; } console.log(a.call(b,3,4));//控制台输出-1 console.log(b.call(a,3,4));/控制台输出7 说明:用a来替换b,即a.call(b,1,2)等于a(1,2) 2)工厂函数写法 function a(x,y){   this.x=x;   this