我在一个问题上遇到了麻烦,以及如何解决它。请注意,我对JavaScript比较陌生,这个问题让我觉得我太复杂了。
问题是:
给定一个整数序列作为一个数组,确定是否可以通过从数组中移除不超过一个元素来获得一个严格递增的序列。
例
对于sequence=[1,3,2,1]
,输出应为almostrecisingSequence(sequence)=false;
这个数组中没有一个元素可以为了得到严格的递增序列而被移除。
对于sequence=[1,3,2]
,输出应为almostrecisingSequence(sequence)=true
。
可以从数组中移除3,以获得严格递增序列[1,2]
。或者,您可以移除2以获得严格递增序列[1,3]
。
谢谢您的评论!我想更新这是一个更好的问题,也告诉你我已经找到了一个解决方案,如果有人想检查它,看看是否有一个更干净的方式来表达它。:)
function almostIncreasingSequence(sequence) {
if(sequence.length == 2) return true;
var error = 0;
for(var i = 0; i < sequence.length - 1; i++){
if(sequence[i] >= sequence[i+1]){
var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];
if(i > 0 && noStepBack && noStepFoward) {
error+=2;
}else{
error++;
}
}
if(error > 1){
return false;
}
}
return true;
}
考虑一下您的代码:
sequence[i+1] - sequence[i] !== 1, variable++;
对于以下数组:[1,2,3,8,8]
。
从问题描述中,不清楚程序是否必须删除一个字符。但如果是这种情况,下面的代码应该做到这一点。
function canGetStrictlyIncreasingSeq(numbers) {
var counter = 0;
var lastGreatestNumber = numbers[0];
for (var i = 1; i < numbers.length; i++) {
if (lastGreatestNumber >= numbers[i]) {
counter++;
lastGreatestNumber = numbers[i];
} else {
lastGreatestNumber = numbers[i];
}
}
if (counter <= 1)
return true;
return false;
}
var nums1 = [1, 2, 3, 4, 5]; //true
var nums2 = [1, 2, 2, 3, 4]; //true
var nums3 = [1, 3, 8, 1, 9]; //true
var nums4 = [3, 2, 5, 6, 9]; //true
var nums5 = [3, 2, 1, 0, 5]; //false
var nums6 = [1, 2, 2, 2, 3]; //false
var nums7 = [1, 1, 1, 1, 1]; //false
var nums8 = [1, 2]; //true
var nums9 = [1, 2, 2]; //true
var nums10 = [1, 1, 2, 3, 4, 5, 5]; //false
var nums11 = [10, 1, 2, 3, 4, 5]; //true
var nums12 = [1, 2, 3, 4, 99, 5, 6]; //true
console.log(canGetStrictlyIncreasingSeq(nums1));
console.log(canGetStrictlyIncreasingSeq(nums2));
console.log(canGetStrictlyIncreasingSeq(nums3));
console.log(canGetStrictlyIncreasingSeq(nums4));
console.log(canGetStrictlyIncreasingSeq(nums5));
console.log(canGetStrictlyIncreasingSeq(nums6));
console.log(canGetStrictlyIncreasingSeq(nums7));
console.log(canGetStrictlyIncreasingSeq(nums8));
console.log(canGetStrictlyIncreasingSeq(nums9));
console.log(canGetStrictlyIncreasingSeq(nums10));
console.log(canGetStrictlyIncreasingSeq(nums11));
console.log(canGetStrictlyIncreasingSeq(nums12));
C++11中引入了序列for循环以实现区间遍历的简化。这里所谓的区间可以是任一种能用迭代器遍历的区间,例如STL中由begin()和end()定义的序列。所有的标准容器,例如std::string、 初始化列表、数组,甚至是istream,只要定义了begin()和end()就行。 这里是一个序列for循环语句的例子: void f(const vector& v) { for (auto
如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。 document.write(cars[0] + "<br>"); document.write(cars[1] + "<br>"); document.write(cars[2] + "<br>"); document.write(cars[3] + "<br>"); document.write(cars[4]
我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f
本文向大家介绍thinkPHP模板中for循环与switch语句用法示例,包括了thinkPHP模板中for循环与switch语句用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP模板中for循环与switch语句用法。分享给大家供大家参考,具体如下: 1.for用法 案例 解析为 2.switch用法 案例 也可以对case的value属性使用变量,例如: 综合案例
本文向大家介绍C#中循环语句:while、for、foreach的使用,包括了C#中循环语句:while、for、foreach的使用的使用技巧和注意事项,需要的朋友参考一下 循环结构可以实现一个程序模块的重复执行,它对于我们简化程序,更好地组织算法有着重要的意义。C#为我们提供了若干种循环语句,分别适用于不同的情形,下面依次介绍。 C#中循环语句:while、for、foreach 1、wh
switch 语句评估一个表达式,将表达式的值与case子句匹配,并执行与该情况相关联的语句。—— MDN switch 是另一种控制流程的方式,根据条件执行不同的代码块。 能用 switch 实现的都可以用 if 实现。 1. 基本语法 switch (表达式) { case 表达式结果为值1的时候: 做的事情; break; case 表达式结果为值