没什么思路啊,题目如下
Given a sequence of integers as an array, determine whether it is possible to obtain a strictly increasing sequence by removing no more than one element from the array.
Example
For sequence = [1, 3, 2, 1], the output should be
almostIncreasingSequence(sequence) = false;
There is no one element in this array that can be removed in order to get a strictly increasing sequence.
For sequence = [1, 3, 2], the output should be
almostIncreasingSequence(sequence) = true.
You can remove 3 from the array to get the strictly increasing sequence [1, 2]. Alternately, you can remove 2 to get the strictly increasing sequence [1, 3].
Input/Output
[time limit] 4000ms (js)
[input] array.integer sequence
Guaranteed constraints:
2 ≤ sequence.length ≤ 105,
-105 ≤ sequence[i] ≤ 105.
[output] boolean
Return true if it is possible to remove one element from the array in order to get a strictly increasing sequence, otherwise return false.
有个思路:2层循环,第一循环移除元素,第二层循环判断移除这个元素后是否有自增序列。
提供一个思路
作出逐差数组: 如 a=[1,3,2,1],逐差后得 [2,-1,-1]
所谓删除一个元素,即在在逐差数组中去头或去尾,或把相邻两个相加合并成一个元素。
因此,若逐差数组中有多于一个负数,则不行; 若无负数,则可以; 否则对惟一的负数作以上操作,若其能被删掉或被合并成正数,则可以
这样一来,时间复杂度可以降到 O(n)
可以在
O(n)
时间做到:对每个相邻的
[a, b]
,判断是否a >= b
。这样的数对破坏严格递增性。如果这样的数对超过一个,返回false。如果一个也没有,返回true。如果1中只有一对
[a0, b0]
,判断 "移除a0
或b0
后是否还是递增" 并返回结果是对的,但是超过规定的时间了,有更好的方法吗?
时间复杂度为O(n)的方法
这个是不是统计逆序数的个数?