目录
一、前言
二、一维数组
1、定义和初始化
2、一维变长数组
3、一维正向遍历
4、一维反向遍历
5、一维数组区间操作、一维数组从 a[1] 开始,读入一维数组
6、一维数组例题1
7、一维数组例题2
三、二维数组
1、二维数组初始化
2、三维数组初始化
3、例题
一、前言
从这一篇文章开始,后面会讲一些数据结构和算法,这篇文章我们先来看看“数组”。
什么是数据结构?
每道编程题都有输入数据和输出数据,输入数据是代码处理的对象,输出数据是代码运行的结果。代码在执行过程中需要用一定的方式来存储、处理数据,就是数据结构。
《数据结构》教材一般包含
线性表(数组、链表)、栈和队列、串、多维数组和广义表、哈希、树和二叉树、图、排序等。
基础数据结构
数组、链表、队列、栈、二叉树。
数组是最简单的数据结构,其把数据连续存储在空间中。
虽然简单,但是在竞赛中至关重要,因为其他数据结构都可以用数组来模拟,即“物理存储上是数组,逻辑上是其他数据结构”。用数组模拟其他数据结构,不是工程项目的正规做法,但是非常适合算法竞赛,因为这样编码快、不易出错。
二、一维数组
1、定义和初始化
>>> a=['']*10;print(a)
['', '', '', '', '', '', '', '', '', '']
>>> b=[0]*10; print(b)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> c=[0 for i in range(10)]; print(c)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> d=[i for i in range(1,10)]; print(d)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
2、一维变长数组
>>> a=[1]
>>> for i in range(2,10):
a.append(i)
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
3、一维正向遍历
s=[0,1,2,3,4,5,6,7,8,9]
for i in range(0,len(s)):
print(s[i],end=' ')
s=[0,1,2,3,4,5,6,7,8,9]
for i in s:
print(i,end=' ')
s=['0','1','2','3','4']*2
for i in s:
print(int(i),end=' ')
4、一维反向遍历
s=[0,1,2,3,4,5,6,7,8,9]
for i in s[::-1]:
print(i,end=' ')
s=[0,1,2,3,4,5,6,7,8,9]
for i in range(len(s)-1,-1,-1):
print(s[i],end=' ')
5、一维数组区间操作、一维数组从 a[1] 开始,读入一维数组
比较简单,不再赘述
6、一维数组例题1
选数异或 2022年第十三届省赛,lanqiao0J 题号 2081
时间限制:1 s 内存限制:256 MB
【问题描述】
给定一个长度为n的数列 A1, A2, ...,An 和一个非负整数 x,给定 m 次查询,每次询问能否从某个区间 [l, r] 中选择两个数使得他们的异或等于 x。
【输入格式】
输入的第一行包含三个整数 n, m, x。第二行包含 n 个整数 A1, A2, ..., An。接下来 m 行,每行包含两个整数 li, ri 表示询问区间 [li, ri]。
【输出格式】
对于每个询问,如果该区间内存在两个数的异或为 x 则输出 yes,否则输出 no。
【评测用例规模与约定】
对于20%的评测用例,1<=n,m<=100;
对于40%的评测用例,1<=n,m<=1000;
对于所有评测用例,1<=n,m<=100000,0<=x<220,1<=li<=ri<=n,0<=Ai<220
暴力法
对每个区间查询,验算区间内的任意两个数,复杂度 O(n^2),共 m 个查询,总复杂度 O(m*n^2),只能通过 20% 的测试。100% 的解法见 “第25讲线段树”
7、一维数组例题2
区间修改、区间求和 lanqiao0J 题号 1133
【题目描述】
给定一个长度为 n 的数组,其初值分别为 a1, a2,.., an。有Q个操作,操作有两种:
1 l r k,将区间 a1+1, ... , ar 的值加上k。
2 l r,求区间al, al+1 , ... , ar 的和是多少。
【输入描述】
输入第 1 行包含两个正整数 N,Q,分别表示数组 a 的长度和操作的个数。
第 2 行包含 N 个非负整数 a1,a2, ... , an,表示数组 a 元素的初值。
第 3 ~ Q-2 行每行表示一个操作,格式如题
【输出描述】
输出共 Q 行,每行包含一个整数,表示相应查询的答案。
三、二维数组
1、二维数组初始化
>>> p=[[0 for i in range(5)]for j in range(2)]
>>> p=[[0]*5 for j in range(2)]
>>>
s=[[1,2,3],[4,5,6]]
print(s)
for i in range(2):
for j in range(3):
print(s[i][j],end=' ')
2、三维数组初始化
>>> a=[[[0 for _ in range(2)] for __ in range(3)] for ___ in range(4)]
>>>
3、例题
都是一些输入,意义不大。
以上,基础数据结构——数组
祝好