【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 ] nums[i] = nums[j] nums[i]=nums[j] 且 ( 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 nums[i], k \le 100 1≤nums[i],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;
    }
}
相关推荐
sali-tec1 分钟前
C# 基于halcon的视觉工作流-章33-矩状测量
开发语言·人工智能·算法·计算机视觉·c#
凯子坚持 c6 分钟前
Redis 核心数据结构:String 类型深度解析与 C++ 实战
数据结构·c++·redis
songx_9931 分钟前
leetcode29( 有效的括号)
java·数据结构·算法·leetcode
于樱花森上飞舞37 分钟前
【java】常见排序算法详解
java·算法·排序算法
GawynKing1 小时前
图论3 图的遍历
算法·深度优先
东方芷兰3 小时前
Leetcode 刷题记录 21 —— 技巧
java·算法·leetcode·职场和发展·github·idea
kyle~3 小时前
排序---选择排序(Selection Sort)
java·算法·排序算法
编码浪子6 小时前
趣味学RUST基础篇(智能指针_结束)
开发语言·算法·rust
爱编程的化学家7 小时前
代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和
数据结构·c++·算法·leetcode·双指针·哈希
闲人编程9 小时前
图像去雾算法:从物理模型到深度学习实现
图像处理·人工智能·python·深度学习·算法·计算机视觉·去雾