当前位置: 首页 > 知识库问答 >
问题:

元素小于k的子阵列数

艾敏学
2023-03-14

我在一次采访中遇到了以下问题。
给定一个数组,您需要找到所有元素小于给定值 k 的子数组
,例如

if k=4,
arr[]={4,8,2,4,6}

现在,值小于 4 的子数组是:

1.{4}
2.{2}
3.{2,4}

注意{4}是如何重复的,但没有考虑两次。现在,代码应该返回不同子阵列的计数
在本例中为3.
另一个示例:

k=4
arr[]={2,3,8,2,4,6}

不同的子阵列:

1.{2}
2.{3}
3.{2,3}
4.{4}
5.{2,4}

我的方法是找到小于给定值k(即O(n^2))的子阵列,然后将其插入类似无序集的内容中以删除重复项。

有没有解决这个问题的有效方法?

共有1个答案

吕扬
2023-03-14

因此,在摆弄了几分钟之后,我终于想出了一个解决方案,即使您的结果与我的结果不同,也要逐字逐句地满足您所说的内容。在你的问题中,你清楚地说:

给定一个数组,找出所有元素小于给定值k的不同子数组。

您给出了我在解决方案中使用的以下示例。

k=4
arr[]={2, 3, 8, 2, 4, 6}

你得出结论,结果应该是:

1.{2}
2.{3}
3.{2,3}
4.{4}
5.{2,4}

实际上,如果您的要求真正得到满足,您将只有三个不同的数组,因为元素必须小于k的提供值,在本例中为4

The values are: 2,3,8,2,4,6
Distinct Arrays Are: {2} {3} {2,3}

解决方案(在C#6.0中)

请随意在. NET Fiddle(需要调整到C#4.5)或Visual Studio(目前处理C#6.0)中进行测试。我不确定如何将其转换回数学公式,如果这是您最终需要的,但此解决方案可以根据所需结果的描述工作。

using System;
using System.Collections.Generic;

public class Program {
    static int k = 4;
    static int[] vals = new int[]{ 2, 3, 8, 2, 4, 6 };
    static List<string> distinctVals = new List<string>();
    public static void Main() {
        Console.WriteLine($"The values are: {string.Join(",", vals)}");
        for (int x = 0; x < vals.Length; x++) {
        if (vals[x] < k)
                if (!distinctVals.Contains(vals[x].ToString()))
                    distinctVals.Add(vals[x].ToString());

            for (int y = 0; y < vals.Length; y++) {
                if (vals[y] < k) {
                    if (!distinctVals.Contains(vals[y].ToString()))
                        distinctVals.Add(vals[y].ToString());

                    if (vals[x] < k && vals[x] != vals[y])
                        if (!distinctVals.Contains($"{vals[x]},{vals[y]}"))
                            if (!distinctVals.Contains($"{vals[y]},{vals[x]}"))
                                distinctVals.Add($"{vals[x]},{vals[y]}");
                }
            }
        }

        Console.WriteLine($"There are {distinctVals.Count} distinct array elements.");
        Console.Write($"The distinct elements are: {{{string.Join("}; {", distinctVals)}}};");
    }
}
 类似资料:
  • 给定一个(未排序的)数组S和一些整数k,找到对的数量i, j使得S的范围[i... j] 我在一次采访中收到了这个问题,经过排序后只能得出一个O(nlogn)解。但是,有人告诉我有一个O(n)解。有什么想法吗?

  • 我知道一个O(n2)soln,它能以更好的方式实现吗,因为数组中元素的数量限制非常大

  • 所以我正在研究一个Leetcode问题,我的代码在某些情况下有效,但在某些情况下失败。 问题是: 给定一个矩阵,其中每个行和列都按升序排序,找出矩阵中第k个最小的元素。 请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素。 例子: 返回: 13 我的方法是使用minHeap,即使它声明数组已经排序,我仍然需要确保我已经将它从最小值排序到最大值。 这是我的代码: 以下是我的意见: 以下是输

  • 我使用最大堆来查找数组中的k个最大元素,如下所示: 1) 我已经构建了给定数组的前k个元素(arr[0]到arr[k-1])的最小堆MH。O(k) 2)对于每个元素,在第k个元素(arr[k]到arr[n-1])之后,将其与MH的根进行比较。 ……a)如果元素大于根,则将其设为根,并为MH调用heapify ……b)否则忽略它。 //步骤2是O((n-k)) 3)最后,MH有k个最大元素,MH的根

  • 我看到一个问题,要求它找到所有相邻子阵列的最小值。例如,对于数组A=[1,2,3],答案将是一个包含[1,2,3,1,2,1]的数组B<怎么做- 我所做的是,构建了一个段树,但是它不包含所有连续子数组的最小值。 我也不认为我可以使用“脱钩”,因为我不必在特定长度的子数组中找到最小值。 那么,我如何获得所有连续子阵列(B阵列)的最小值?

  • 这是一个面试问题。 在具有排序行和列的矩阵中找到Kth最小元素。 Kth最小元素是中的一个,例如,这是否正确?