数组公式

[leetcode 周赛 149] 1157 子数组中占绝大多数的元素

て烟熏妆下的殇ゞ 提交于 2019-11-28 00:01:18
目录 1157 Online Majority Element In Subarray 子数组中占绝大多数的元素 描述 思路 代码实现 1157 Online Majority Element In Subarray 子数组中占绝大多数的元素 描述 实现一个 MajorityChecker 的类,它应该具有下述几个 API : MajorityChecker(int[] arr) 会用给定的数组 arr 来构造一个 MajorityChecker 的实例。 int query(int left, int right, int threshold) 有这么几个参数: 0 <= left <= right < arr.length 表示数组 arr 的子数组的长度。 2 * threshold > right - left + 1 ,也就是说阈值 threshold 始终比子序列长度的一半还要大。 每次查询 query(...) 会返回在 arr[left] , arr[left+1] , ..., arr[right] 中至少出现阈值次数 threshold 的元素,如果不存在这样的元素,就返回 -1 。 示例: MajorityChecker majorityChecker = new MajorityChecker([1,1,2,2,1,1]); majorityChecker

第一阶段:Python开发基础 day18 模块的使用(三)

假装没事ソ 提交于 2019-11-27 21:34:52
目录 上节课内容回顾 一、numpy模块 一、numpy简介 二、为什么用numpy 三、创建numpy数组 五、获取numpy数组的行列数 六、切割numpy数组 七、numpy数组元素替换 八、numpy数组的合并 九、通过函数创建numpy数组 十、numpy数组运算 十一、numpy数组运算函数 十二、numpy数组矩阵化 十三、numpy数组数学和统计方法 十四、numpy.random生成随机数 二、pandas模块 一、Series数据结构 三、DataFrame属性 四、DataFrame取值 五、DataFrame值替换 六、读取CSV文件 七、处理丢失数据 九、导入导出数据 十、pandas读取json文件 10.1 orient参数的五种形式 十一、pandas读取sql语句 三、matplotlib模块 一、条形图 二、直方图 三、折线图 四、散点图+直线图 五、饼图 六、箱型图 七、plot函数参数 八、图像标注参数 今日总结 上节课内容回顾 包 一个模块aaa.py中方法太多了, 所以分成多个文件m1.py, m2.py, 把m1.py和m2.py放到名字为aaa的包(含有init文件的文件夹叫包)里 导入aaa包就是导入init, 所以往init里面加入一个f1() import aaa aaa.f1() import aaa aaa.f1() ##

20182301 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结

北城余情 提交于 2019-11-27 18:40:28
20182301 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结 教材学习内容总结 第十二章 算法效率:用更少的时间去做同等质量的事情 好算法的要求:正确性、可读性、健壮性、通用性、效率与储存空间需求 算法效率可以用问题大小(n)和及处理步骤来定义。增长函数表示问题大小与希望优化的值之间的关系,该函数表示算法的时间或空间利用率 复杂度(时间、空间) 图: 注意:若计算一个算法的阶,其中涉及函数调用时,要把函数里面的调用也算上。 第十四章 集合 集合是收集并组织其他对象的对象 集合定义了访问及管理称为集合元素的其他对象的一种具体方式 集合中的元素一般由加入集合的次序或元素之间某些固有的关系而组织 集合是隐藏其实现细节的一个抽象名称 数据结构是用来实现集合的基本程序设计结构 栈集合 栈以LIFO的方式处理元素——最后进入的元素最先离开 程序员应该选择与所需管理的数据的类型相匹配的结构 操作 描述 push 将元素添加到栈顶 pop 删除栈顶元素 peek 查看栈顶元素 isEmpty 是否为空 size 判定栈中元素 泛型 Java允许泛型来定义类 不允许泛型实例化 当需要Box时,可以用具体的类来取代T,从而实例化它 class Box<T> { //T类型对象的声明和操作代码 } Box<Widge> box1=new Box<Widege>; 栈的ADT

C++ 算法

只谈情不闲聊 提交于 2019-11-27 14:26:55
第3章 控制语句 /* 1、打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 13 + 53 + 33。 */ #include<iostream.h> void main() { int i, a=0, b=0, c=0; for(i=100;i<1000;i++) { a=i%10; b=i/10%10; c=i/100%10; if(a*a*a+b*b*b+c*c*c==i) cout<<"i="<<i<<endl; } } /* 2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面的格式输出其因子: 6 -〉1,2,3 */ #include<iostream.h> void main() { int i,j,sum=0,a[50],k,t; for(i=1;i<=1000;i++) { sum=0; for(j=1;j<i;j++) { if(i%j==0) { sum+=j; a[k++]=j; } } t=k; if(sum==i) { cout<<i<<"->"; for(k=0;k<t;k++) { cout<<a[k]; if(k<t-1)cout<<",";

最大子序和

妖精的绣舞 提交于 2019-11-27 10:51:35
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 解:这道题关键要区分开连续最大值和最大值,我就写错了 另外动态公式为f(n) = max(f(n-1) + A[n], A[n]); 将这些最大和保存下来后,取最大的那个就是,最大子数组和。因为最大连续子数组 等价于 最大的以n个数为结束点的子数列和 class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.empty()) { return 0; } int fn=0,i=0,imax=INT_MIN; for(;i<nums.size();i++) { fn=max(nums[i],fn+nums[i]); imax=max(imax,fn); } return imax; } }; 来源: https://www.cnblogs.com/wangshaowei/p/11360456.html

HLSC D15 模拟题订正

你说的曾经没有我的故事 提交于 2019-11-27 08:44:38
目录 数组 title analysis code 盒子 title analysis code 取模或异或 title analysis code 数组 title Description 有一个长度为 \(n\) 的数组 \(b\) ,以及长度为 \(n\) 且初始值为零的数组 \(a\) ,每次可以对 \(a\) 数组的一个区间 \([l,r] (1≤ l ≤ r ≤ n)\) 进行操作,使得该区间内的 \(a_i\) 全部加 1 。问最小的操作次数使得对任意 \(1\leqslant i\leqslant n\) ,有 \(a_i=b_i\) 。 你会发现这实际上是去年 \(NOIP\) 提高组 \(Day1T1\) ,对于你来说过于简单,于是我们稍稍加大了点难度。 在本题中,会给出一个长度为 \(n\) 的数组 \(b\) ,并会共有 \(m\) 次操作或询问,种类分为两种: 1 l r k: 将区间 \([l,r]\) 中的 \(b_i\) 加上 \(k\) 。 2 l r: 当 \(b_1, b_2, ..., b_{l-1}, b_{r+1}, b_{r+2}, ..., b_n\) 的值均为 0 时,询问数组 \(b\) 对应的答案并输出。 Input 第一行两个数 \(n,m\) 表示数组的长度以及操作的次数。 第二行 \(n\) 个数表示初始状态下数组 \(b

数组原理

别等时光非礼了梦想. 提交于 2019-11-27 08:09:41
数据结构课程学习笔记。 数组概念 数组 (Array)是一种 线性表数据结构 。它用一组 连续 的 内存空间 ,来存储一组具有 相同类型的数据 , 并且 不支持动态扩容。 线性表 线性表就是数据排成一条线一样的数据结构,每个线性表最多只有前后两个方向,数组,链表丶队列丶栈等都是线性表数据结构。 非线性表 非线性表就是数据不规则,与线性表是相对立的,比如二叉树丶堆丶等,在非线性表中,数据之间并不是简单的前后关系。 数组随机访问 公式 address [ i ] = base_address + i * data_type_size address[i] : 下标 i 的地址值。 base_address: 数组的 首地址 。 data_type_size: 数组中每个元素的大小,也就是数据类型大小(字节),例如int是4个字节。 数组的增加和删除 数组 (Array) 在 增删查 这三个动作中,查询是高效的,但是增和删是低效的,查询高效是因为 数组支持随机访问 ,时间复杂度是 O(1) ,这里就不多赘述了,但是在 增加 和 删除 的动作中,因为会涉及 数据搬移 ,所以时间复杂度是 O(n) ,下面来详细讲解。 低效的"插入"和"删除" int [ ] info = new int [ 6 ] ; 插入 数组 info 是一个 一维数组 ,其内容是 33,44,66,77,88

数据结构-数组

折月煮酒 提交于 2019-11-27 04:08:39
  一、数组的概念   定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。   从概念中可以知道一下几点: 数组是线性表。     所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构        连续的内存空间和形同类型的数据。    正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问 数组实现下标随机访问   下面通过一个实际的例子来说明:   例如有一个长度为10的int数组,int[] a = new int[10].      计算机给数组a[10]分配了一块连续的内存空间1000~1039,其中,内存块的首地址为base_address = 1000.   计算机会为每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算即需要随机访问数组中的某个元素的时候,它会首先通过下面的寻址公式,计算该元素存存储的内存地址:            a[i]_address = base_address + i * data_type_size    其中data_type_size表示数组中每个元素的大小。例如,数组中存储的int类型的数据,所以,data_type_size就是4字节。 二、数组的操作  

HashMap源码分析

吃可爱长大的小学妹 提交于 2019-11-27 02:36:50
HashMap概述(非线程安全) HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 线程安全的HashMap: 方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的。 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。 方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进。 JDK1.8中HashMap的数据结构 在 Java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的 数据结构 都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结构,但是在jdk1.8里 加入了红黑树的实现,当链表的长度大于8时,转换为红黑树的结构(之前是由负载因子实现存储的,通过红黑树结构存储这点性能是非常好的)。 JDK1.8中HashMap采用了链地址法,链地址法,就是数组加链表的结合。在数组元素上都有一个链表结构,当数据被Hash后,得到准确的数组下标

树状数组基础

大城市里の小女人 提交于 2019-11-26 23:04:31
树状数组,顾名思义,是一个树形的数据结构,它的基本用途是较高效地维护序列的前缀和。 先补充几个知识: lowbit运算:取出非负整数n在二进制下最低位的1以及它后边的0构成的数值。例如,若n=6,则n在二进制下表示为110,所以lowbit(n)=2。如何实现lowbit运算呢?设n>0,n的第k位是1,第0~k-1位都是0,则: 将n取反,此时第k位为0,第0~k-1位为1; 将n自加,即n=n+1,由于进位,此时第k位为1,第0~k-1位为0; 将前两步操作后的数与上n。 在前两步操作过后,n的第k+1位至最高位都与原来相反,所以三步操作后的数,即n&(~n+1),仅有第k位为1,其余位都为0。而在补码表示下,~n=-1-n,因此可以得出lowbit运算的公式: lowbit(n)=n&(-n) 由于树状数组比较抽象,在讲解之前,先放一张概念图: 其中,c[x]存储区间[x-lowbit(x)+1,x]中所有数的和。 树状数组有以下几个性质: 每个内部节点c[x]存储以它为根的子树中所有叶节点的和 每个内部节点c[x]的子节点个数等于lowbit(x)的位数 除树根外,每个内部节点c[x]的父节点为c[x+lowbit(x)] 树的深度为O(logN) 正因为树状数组满足以上的性质,它才能高效地维护序列的前缀和。在实现过程中,我们只要建立一个树状数组c[N]