12 篇
常见数据结构专区
题目描述 在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望下标数字 i 和 j 满足 i < j 且有 (time[i] + time[j]) % 60 == 0。 思路 这道题的核心思想是利用余数配对: 两个数之和能被 6
题目描述 矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。 给你一个 m * n 的整数矩阵 mat ,请
题目描述 给你一个整数数组 nums 和一个整数 k。 每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。 返回你可以对数组执行的最大操作数。 思路 通过一次遍历数组,和两数之和一样,每次先看看哈希表中是否有k−nums[i],有就去掉哈希表中的一个 k−nums[i],同时把答案加一,没有就把n
题目描述 给定一个 n 行的二维数组 rectangles,其中每一行表示一个矩形: rectangles[i] = [width_i, height_i]。 如果存在一对矩形 i、j(i < j)满足: width_i / height_i == width_j / height_j(实数除法), 则称这两个矩形是
题目描述 给你一个下标从 0 开始的整数数组 nums。如果 i < j 且 j - i != nums[j] - nums[i],那么我们称 (i, j) 是一个坏数对。 请你返回 nums 中坏数对的总数目。 思路 直接统计坏数对的数量比较困难,可以转换思路:统计好数对的数量,然后用总数对减去好数对即可得到坏数对的
题目描述 给你一个下标从 0 开始的字符串数组 words。如果两个字符串由相同的字符组成,则认为这两个字符串相似。例如,"abca" 和 "cba" 相似,因为它们都由字符 'a'、'b'、'c' 组成;然而,"abacba" 和 "bcfd" 不相似。请你找出满足字符串 words[i] 和 words[j] 相似
题目描述 给定一个下标从 0 开始、大小为 m × n 的二维整数矩阵 grid,请你构造一个同样大小的矩阵 answer。 对于矩阵 answer 中的每个单元格 (r, c),其值按如下方式计算: topLeft[r][c] 表示在矩阵 grid 中,位于单元格 (r, c) 左上方向对角线上的所有元素中,不同值
题目描述 给你一个二维 boolean 矩阵 grid 。 如果 grid 的 3 个元素的集合中,一个元素与另一个元素在 同一行,并且与第三个元素在 同一列,则该集合是一个 直角三角形。3 个元素 不必 彼此相邻。 请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1
题目描述 给你一个整数数组 nums。该数组包含 n 个元素,其中 恰好 有 n - 2 个元素是 特殊数字。剩下的 两个 元素中,一个是所有 特殊数字 的 和,另一个是 异常值。 异常值 的定义是:既不是原始特殊数字之一,也不是表示元素和的那个数。 注意,特殊数字、和 以及 异常值 的下标必须 不同,但可以共享 相同
题目描述 给定一个二维整数数组 points,其中 points[i] = [x_i, y_i] 表示平面上的一个点。任意挑选四个不同的点,若能够构成至少一对水平边(平行 x 轴)的凸四边形,则称其为 水平梯形。请返回可以组成的水平梯形数量,对 1_000_000_007 取模。 思路 要形成水平梯形,至少需要两个不同
题目描述 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 知识边界 对角线坐标特性:在二维矩阵中,同一条对角线(右上到左下方向)上的元素的行列坐标索引之和 i + j 是一个固定常数。 切片预分配:在 Go 语言中,通过 make([]int, 0, m*n)
题目描述 设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。 思路 仍然是经典的两数之和,不过我们需要把满足条件的所有数对都枚举出来。遍历数组时: 用哈希表 cnt 统计左侧每个数字尚能匹配的次数; 枚举当前数字 x 时,先看 need = target - x 是否仍有可用配对; 若可用