【问题标题】:Output least number of slices required to sort an array in C#输出在 C# 中对数组进行排序所需的最少切片数
【发布时间】:2020-06-26 19:11:18
【问题描述】:

我想输出将 n 个不同整数的未排序数组切片为一个或多个切片所需的切片数,并对它们进行排序,以便在排序后的切片返回时(以相同的顺序),它给出原始数组按排序顺序。

例如,

给定数组 = [2,1,6,4,3,7]

如果你像这样对给定的数组进行切片:[2,1] [6,4,3] [7] 然后像这样单独排序:[1,2] [3,4,6] [7] 并且最后,像这样加入它们:[1,2,3,4,6,7] 你得到了按排序顺序排列的原始数组。因此,切片数为 3

我尝试在 Stack Overflow/Google 中搜索它并找到以下解决方案,但它似乎不适用于上述输入(返回 2 而不是 3)。

public int solution(int[] A)
{
    if (A.Length < 3) return A.Length;
    int count = 0;
    for (int i = 1; i < A.Length; i++)
    {
         if (A[i] > A[i - 1]) count += 1;
    }
    return count;
}

谁能建议我们如何解决这个问题并在 C# 中适当地解决这个问题

【问题讨论】:

  • 对切片进行排序然后以相同的顺序将它们连接回来是什么意思?为什么那个例子应该给出 3 的结果?
  • 如果你像这样对给定的数组进行切片:[2,1] [6,4,3] [7] 然后像这样单独排序:[1,2] [3,4,6 ] [7] 最后,像这样加入它们: [1,2,3,4,6,7] 你得到原始数组的排序顺序。因此,切片数为 3。
  • edit您的问题与该描述。您希望函数返回切片数的事实在原始问题中并不存在。
  • 您忽略了 1 个切片的 null 大小写,因此请以 count = 1 而不是 count = 0 开头。
  • @Mocas 如果您在回复我,我也想知道同样的问题,但是您是否认为有一些约束不允许初始数组类似于 [3,1,6,4,2 ,7]?

标签: c# arrays


【解决方案1】:
public int solution(int[] A) {
    int l = A.length;
    if (l < 3) return l;
    int count = 0;
    for (int i = 1; i < l; i++) {
        if (A[i] > A[i - 1]) count += 1;
    }
    if (A[l - 1] > A[l - 2]) {
        count += 1;
    }
    return count;
}

【讨论】:

  • 虽然这段代码可以回答这个问题,但最好包含一些context,解释它的工作原理如何。从长远来看,纯代码的答案没有用处。
猜你喜欢
  • 2016-02-20
  • 2017-01-09
  • 2015-01-06
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多