2022-05-19:给定一个数组arr,给定一个正数M, 如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。 返回arr中M整除对的总数量。 来自微软。

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-05-19:给定一个数组arr,给定一个正数M, 如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。 返回arr中M整除对的总数量。 来自微软。相关的知识,希望对你有一定的参考价值。

2022-05-19:给定一个数组arr,给定一个正数M,
如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。
返回arr中M整除对的总数量。
来自微软。

答案2022-05-19:

求余,答案叠加,次数叠加。
时间复杂度:O(N)。
空间复杂度:O(M)。

代码用rust编写。代码如下:

fn main() 
    let arr: Vec<isize> = vec![5, 5, 5];
    let ans = num2(&arr, 5);
    println!("ans = ", ans);


fn num2(arr: &Vec<isize>, m: isize) -> isize 
    let n = arr.len() as isize;
    let mut cnts: Vec<isize> = vec![];
    for _i in 0..m 
        cnts.push(0);
    
    let mut ans: isize = 0;
    let mut i: isize = n - 1;
    while i >= 0 
        let cur = (arr[i as usize] % m + m) % m;
        ans += cnts[((m - cur) % m) as usize];
        cnts[cur as usize] += 1;
        i -= 1;
    
    return ans;


执行结果如下:


左神java代码

以上是关于2022-05-19:给定一个数组arr,给定一个正数M, 如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。 返回arr中M整除对的总数量。 来自微软。的主要内容,如果未能解决你的问题,请参考以下文章

2021-07-30:两个有序数组间相加和的Topk问题。给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组。按照降

2021-08-09:给定一个有正有负有0的数组arr,给定一个整数k,返回arr的子集是否能累加出k。1)正常怎么做?2)如果arr中的数值很大,但是arr的长度不大,怎么做?

2021-05-13:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,返回arr的最大子数组异或和。

2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多

2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由01组成的数组arr,长度为N, arr[i] == 0表示str中i位置的字符不许修改, arr[i] ==

给定一个排好序的数组,然后求出丢失的数字