408算法题汇总

408算法题汇总

周六 9月 26 2026
1212 字 · 5 分钟

说在前面

  • 部分题目只是思想相同,并非完全一样的题目,比如2010年的题目和力扣的题目,做题时请注意。不同的题目我会标注。
  • 如果你要使用C++写题目,请不要使用Vector,String等STL容器。否则,考试中将不能得分。
  • 简单的函数,如math类等,可以酌情使用,使用后请用注释解释含义。
  • 想看原题,可前往此网站:408题库↗
  • 暴力解只会扣2-3分,所以想不到好方法,可以直接暴力。

顺序表的应用

2010年

设将 n (n>1)n\ (n>1)个整数存放到一维数组RR中。试设计一个在时间和空间两方面都尽可能高效的算法。将RR中保存的序列循环左移p (0<p<N)p\ (0<p<N)个位置,即将RR中的数据由<x0,x1,⋯ ,xn−1><x_0, x_1, \cdots, x_{n-1}>变换为<xp,xp+1,⋯ ,xn−1,x0,x1,⋯ ,xp−1><x_p, x_{p+1}, \cdots, x_{n-1}, x_0, x_1, \cdots, x_{p-1}>。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,采用 C 或 C++ 语言描述,关键之处给出注释。
  3. 说明你所设计算法的时间复杂度和空间复杂度。

https://leetcode.cn/problems/rotate-array/description/↗ 【diff:向左、向右】

2011年

一个长度为 LL(L≥1L \geq 1)的升序序列 SS,处在第 ⌈L/2⌉\lceil L/2 \rceil个位置的数称为SS的中位数。例如,若序列S1=(11,13,15,17,19)S_1 = (11,13,15,17,19),则 S1S_1的中位数是 15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列S2=(2,4,6,8,20)S_2 = (2,4,6,8,20),则 S1S_1和S2S_2的中位数是 11。现有两个等长的升序序列AA和BB,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列 AA和BB 的中位数。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,采用 C 或 C++ 语言描述,关键之处给出注释。
  3. 说明你所设计算法的时间复杂度和空间复杂度。

https://www.acwing.com/problem/content/3822/↗

2013年

已知一个整数序列 A=(a0,a1,…,an−1)A = (a_0, a_1, \dots, a_{n-1}),其中 0≤ai<n (0≤i<n)0 \le a_i < n \ (0 \le i < n)。 若存在 ap1=ap2=⋯=apm=xa_{p_1} = a_{p_2} = \dots = a_{p_m} = x 且 m>n/2 (0≤pk<n,1≤k≤m)m > n/2 \ (0 \le p_k < n, 1 \le k \le m) ,则称 xx为AA的主元素。 例如 A=(0,5,5,3,5,7,5,5)A = (0, 5, 5, 3, 5, 7, 5, 5) ,则 55为主元素;又如 A=(0,5,5,3,5,1,5,7)A = (0, 5, 5, 3, 5, 1, 5, 7) ,则 AA 中没有主元素。 假设AA中的nn个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出AA的主元素。若存在主元素,则输出该元素;否则输出−1-1。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,采用 C、C++ 语言描述算法,关键之处给出注释。
  3. 说明你所设计算法的时间复杂度和空间复杂度。

https://leetcode.cn/problems/majority-element/description/↗ 【diff:无需判空、元素无限制范围】

2018年

给定一个含 n(n≥1)n(n \ge 1) 个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{−5,3,2,3}\{-5, 3, 2, 3\}中未出现的最小正整数是 1;数组{1,2,3}\{1, 2, 3\}中未出现的最小正整数是 4。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
  3. 说明你所设计算法的时间复杂度和空间复杂度。

https://leetcode.cn/problems/first-missing-positive/description/↗ 【diff:要求常数级别额外空间】

https://www.acwing.com/problem/content/3823/↗

2020年

定义三元组 (a,b,c)(a,b,c)(a,b,ca,b,c均为正数)的距离D=∣a−b∣+∣b−c∣+∣c−a∣D = |a-b| + |b-c| + |c-a|。给定 3 个非空整数集合 S1,S2,S3S_1,S_2,S_3,按升序分别存储在 3 个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组 (a,b,c)(a,b,c)(a∈S1,b∈S2,c∈S3a \in S_1, b \in S_2, c \in S_3)中的最小距离。例如 S1={−1,0,9},S2={−25,−10,10,11},S3={2,9,17,30,41}S_1 = \{-1, 0, 9\}, S_2 = \{-25, -10, 10, 11\}, S_3 = \{2, 9, 17, 30, 41\}。则最小距离为 2,相应的三元组为 (9,10,9)(9,10,9)。

要求:

  1. 给出算法的基本设计思想;
  2. 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释;
  3. 说明你所设计算法的时间复杂度和空间复杂度。

https://www.acwing.com/problem/content/3877/↗

2025年

设有两个长度均为 nn的一维整型数组AA和 res,对数组AA中的每个元素A[i]A[i],计算 A[i]A[i]与A[j]A[j](0≤i≤j≤n−10 \le i \le j \le n-1)乘积的最大值,并将其保存到 res[i] 中。例如,若 A={1,4,−9,6}A = \{1,4,-9,6\},则得到 res = {6, 24, 81, 36}。现给定数组 AA,请设计一个时间和空间上尽可能高效的算法 calMulMax,求 res 中各元素的值。函数原型为:

C
void calMulMax(int A[], int res[], int n)

要求:

  1. 给出算法的基本设计思想:
  2. 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释:
  3. 说明你所设计算法的时间复杂度和空间复杂度。

Thanks for reading!

408算法题汇总

周六 9月 26 2026
1212 字 · 5 分钟

© MeLsrain | CC BY-NC-SA 4.0

Comments

cover

⎋ⁱ̴̴̴≮̸̸̴⨦̷̶̷⟁̶░̴̷.̵̐͝⟆⟟ⷙ̶̸⚚⍜⛀⍦꙰

AQUASINE