处理非递减颜色亮度序列

时间:2017-08-03 20:08:51

标签: java arrays sorting

我正在学校的一个项目上工作,其中一件事正在尝试建立一个非减少亮度序列"方法。解释:我被要求编写查找并返回最长序列的非递减值的代码。例如,给定以下序列: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的逻辑,我将不胜感激。如果您需要我显示更多代码,请告诉我。

1 个答案:

答案 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);

https://jsfiddle.net/3Lhrjutu/2/