【Leetcode 每日一题】2176. 统计数组中相等且可以被整除的数对

问题背景

给你一个下标从 0 0 0 开始长度为 n n n 的整数数组 n u m s nums nums 和一个整数 k k k,请你返回满足 0 ≤ i < j < n 0 \le i < j < n 0≤i<j<n, n u m s i = n u m s j numsi = numsj numsi=numsj 且 ( i × j ) (i \times j) (i×j) 能被 k k k 整除的数对 ( i , j ) (i, j) (i,j) 的 数目

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 100 1 \le nums.length \le 100 1≤nums.length≤100
  • 1 ≤ n u m s i , k ≤ 100 1 \le numsi, k \le 100 1≤numsi,k≤100

解题过程

这题数据范围不大,暴力枚举也能过。

一种更好的做法,是将值像等的元素都保存在链表中,遍历时就只需要判断能否整除了。

具体实现

java 复制代码
class Solution {
    public int countPairs(int[] nums, int k) {
        int n = nums.length;
        int res = 0;
        ListNode[] map = new ListNode[110];
        for (int i = 0; i < n; i++) {
            ListNode cur = new ListNode(i);
            ListNode pre = map[nums[i]];
            if (pre != null) {
                cur.next = pre;
            }
            while (pre != null) {
                if (i * pre.index % k == 0) {
                    res++;
                }
                pre = pre.next;
            }
            map[nums[i]] = cur;
        }
        return res;
    }
}

class ListNode {
    int index;
    ListNode next;
    ListNode(int index) {
        this.index = index;
        next = null;
    }
}
相关推荐
8Qi88 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
888CC++10 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
pluviophile_s11 小时前
数据结构:第2讲:线性表
数据结构·笔记
(●—●)橘子……11 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科13 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
KaMeidebaby13 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
无限码力13 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
Love_云宝儿14 小时前
WKT数据示例并与GeoJSON数据对比
数据结构·gis
BlockWay14 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft