我的算法在哪里有缺陷,无法在求和除以k的数组中找到所有对

本文关键字:数组 有缺陷 在哪里 算法 求和 我的 | 更新日期: 2023-09-27 17:59:29

我不明白我做错了什么。

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{
    static void Main(String[] args) 
    {
        string[] lineParts = Console.ReadLine().Split(' ');
        int k = Convert.ToInt32(lineParts[1]);
        int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse);
        var indices = Enumerable.Range(0, arr.Length - 1);
        int pairsDivideK = (from i in indices
                            from j in indices
                            where i < j && ((arr[i] + arr[j]) % k == 0)
                            select 1).ToList().Count / 2;
        Console.WriteLine(pairsDivideK);
    }
}

输入:

6 3
1 3 2 6 1 2

预期输出:

5

我的输出:

1

我的算法在哪里有缺陷,无法在求和除以k的数组中找到所有对

首先,您不必除以2。由于where i < j条件,因此没有重复。

第二:你必须使用Enumerable.Range(0, arr.Length)(没有-1),因为第二个参数不是上限,而是元素的数量。

所以你的代码应该是:

...
var indices = Enumerable.Range(0, arr.Length);
int pairsDivideK = (from i in indices
                    from j in indices
                    where i < j && ((arr[i] + arr[j]) % k == 0)
                    select 1).ToList().Count;
Console.WriteLine(pairsDivideK);