我正在学校的一个项目上工作,其中一件事正在尝试建立一个非减少亮度序列"方法。解释:我被要求编写查找并返回最长序列的非递减值的代码。例如,给定以下序列:67.8,91.3, 56.3,87.3,87.3,90.4 ,55.0,将返回的序列是以粗体显示的值序列。基本上,我被要求返回一个Line对象引用数组 - 而不是值 - 代表这个序列,我对程序逻辑有一些问题,我需要帮助。这个是我到目前为止所写的。该方法正在我的项目的LineSet类中编写:
public nonDecrBrightSeq() {
int maxRow = 1, currentRow = 1 , startIndex = 0;
for (int i = 0; i < data.length; i++) {
double b1 = data[i].brightness();
double b2 = data[i + 1].brightness();
if (b1 > b2 && currentRow >= maxRow)
startIndex = i - currentRow;
if (b2 < b2 && currentRow <= maxRow)
startIndex = i + currentRow;
if (b2 = b2 && currentRow == maxRow)
startIndex = i + currentRow;
}
return currentRow;
}
此外,这是&#34; brigthness&#34;从&#34; Line&#34;中获得证实的方法类。亮度基于颜色的红色,绿色和蓝色分量计算。为计算它而设置的等式如下;我试图设置它,以便乘数不是平方,只有R,G和B值:
public double brightness (Color color) {
double brightness = Math.sqrt(Math.pow(color.getRed(),2) * .241 +
Math.pow(color.getGreen(),2) * .691 +
Math.pow(color.getBlue(),2) * .068);
return brightness;
}
我的导师给了我一个标志提示。他可能希望我把它作为一种排序方法,但它是泡沫,选择还是插入或者不是上述方法:
假设您正在向另一个人提出挑战。告诉他们你要向他们展示一系列扑克牌;在展示第一个之前,你会告诉他们多少。他们将一次一张地显示每张卡片,并且只会看到当前的卡片(而不是整张卡片)。你给他们一个垫子和一支铅笔,并告诉他们他们可以做任何他们喜欢的笔记。最后,他们需要告诉你最长的不减少的牌序列,告诉你那个序列中有多少张牌以及哪张牌开始了这个序列。
如果有人有任何见解我如何更好地制作nonDecrBrightSeq的逻辑,我将不胜感激。如果您需要我显示更多代码,请告诉我。
答案 0 :(得分:0)
我不确定我是否正确理解了您的问题,但我会使用这种方法:
var test = [67.8, 56.3, 87.3, 87.3, 90.4, 55.0, 33, 35, 36, 37, 37, 38, 1, 2, 99];
function findLongestNonDecrSeq(data) {
var maxLength = 0;
var currLength = 1;
var startIndex = 0;
for (var i = 1; i < data.length; i++) {
if (data[i] < data[i-1]) {
if (currLength > maxLength) {
maxLength = currLength;
startIndex = i - maxLength;
}
currLength = 1;
} else {
currLength++;
}
}
return {'startIndex':startIndex, 'maxLength': maxLength};
}
var result = findLongestNonDecrSeq(test);
document.write('startIndex: ' + result.startIndex);
document.write('<br>');
document.write('maxLength: ' + result.maxLength);