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

使用Java检查序列是否几乎严格地按升序排列

长孙阳泽
2023-03-14

这是我面试问题的一部分。

给定一个整数序列作为一个数组,我必须确定是否可以通过从数组中移除不超过一个元素来获得一个严格递增的序列。

例如,

对于sequence=[1,3,2,1],输出应该是

almostincreasingsequence(sequence)=false

在这个数组中没有一个元素可以被移除以得到一个>严格递增的序列。

对于sequence=[1,3,2],输出应该是

almostincreasingsequence(sequence)=true

我们可以从数组中删除3,以得到严格递增序列[1,2]。或者,我们可以移除2以得到严格递增序列[1,3]

如果可以从数组中移除一个元素以获得严格递增的序列,则函数必须返回true,否则返回false

面试官想要的概念算法如下所示:

boolean almostIncreasingSequence(int[] sequence) {
    int seq1 = 0;
    int seq2 = 0;

    for(int i = 0; i < sequence.length - 1; i++){
        if(sequence[i] >= sequence[i + 1]) seq1++;
    }

    for(int k = 0; k < sequence.length - 2; k++){
        if(sequence[k] >= sequence[k + 2]) seq2++;
    }

    return !(seq1 + seq2 > 2);
}

但是我没有得到将序列[I]序列[I+1]序列[I+2]进行比较以增加计数器的部分,即seq1seq2。这是如何涵盖所有案件的?


共有1个答案

贝自怡
2023-03-14

这是如何涵盖所有案件的?

它没有。

这个算法是错误的。

{1,2,3,5,4,6,7,9,8}

它不是一个几乎严格递增的序列,因为您必须删除至少两个元素(例如,4和9),才能使它严格递增。

但是,您发布的代码将返回true,因为seq1+seq2==2(seq12seq20)。

一个可能的解决方案:

  • 遍历数组,比较每对相邻元素。
  • 当您第一次发现一个不是严格递增的对(a[i]>=a[i+1]),您必须检查删除a[i]或[i+1]是否会使数组严格递增。
    • 如果删除[i],则必须确保[i-1]
    • 如果删除一个[i+1],则必须确保一个[i]
    • 如果验证失败,则返回false.
    • 如果发现另一对不是严格递增的,则返回false。
    • 否则返回true。

 类似资料:
  • 这是第一个数组。 用户可以输入不超过100个整数,如果用户输入负数,将停止。 这是第二个数组。 用户可以输入不超过100个整数,如果用户输入负数将结束。 打印出第一个整数列表 rint出第二个整数列表 问题在于,它不会检查数组是否按升序排列。↓↓↓ 如果inOder=1,我需要合并这两个数组。

  • 我正在研究一些关于代码信号的Javascript挑战,遇到了这个问题: 给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得一个严格递增的序列。** 注意:如果a0 我的方法是遍历序列数组,检查当前元素是否大于下一个元素,如果大于,则删除当前元素。然后,递增一个计数器,如果计数器小于2,则返回true,否则返回false。 下面是我的代码: 这个解决方案解决了17/19个

  • 我试图编写代码,确定是否可以通过从数组中移除一个元素来获得一个严格递增的整数数组。 我的代码适用于17种情况中的16种,但我想不出一种方法来整洁地重写我的代码,以便它考虑到一个数字比它前面的大,也比它后面的小的情况,就像我写这个for循环的方式一样。这是我的代码。这种方法不适用于数组:[1,2,3,4,3,6],因为它不像当前构造for循环那样将数组中的最后3视为违规者。 }

  • 我在学校的任务是创建一个程序,以升序排列数组的值。它几乎就在那里,但每当我输入“44 55 66 22 33 11 77 99 88 66”或它输出的任何数字 -858993460,11,22,33,44,55,66,66,77,88,或开头为负数 第一个数字到底怎么了?我是不是缺了什么? 我对C++很陌生,我不太明白这里的问题。如果有什么建议我可以用请告诉他们。 }

  • 我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。

  • 问题内容: 我正在尝试编写一个函数,该函数将测试列表是否按降序排列。到目前为止,这是我所拥有的,但似乎不适用于所有列表。 我使用了列表,它返回了。 我似乎无法弄清楚我的错误在哪里。 问题答案: 您宁可进行反向检查(一旦获得,则返回false