Build Castles(構建城堡)

Charlemagne, the King of Frankie,java

英文描述

請參考圖片中的說明。git

中文描述

根據給出的數組肯定可以蓋多少城堡。github

思路和點評

我不能肯定個人思路是正確的,也歡迎你們參與討論。數組

根據給出的數組,由於有重複的值,我首先想到的是將給出的數組進行一次過濾和處理,去掉重複的值。測試

例如,給出的數組爲:int[] A = { 2, 2, 3, 4, 3, 3, 2, 2, 1, 1, 2, 5 };,那麼我但願處理爲:int[] A = { 2, 3, 4, 3, 2, 1, 2, 5 }; 去掉重複的值,由於重複的值在這裏沒有意義。ui

而後根據新的數組進行判斷,須要判斷的是 2 個端點,你須要將 2 個端點考慮爲 0。spa

那麼根據上面已經處理過的數組,你在進行遍歷的時候,針對第一個值 2 ,你須要判讀左側的值和右側的值,由於默認左側的值一直爲 0 ,那麼右側的值爲 3 的話,那麼這裏須要 v 須要 +1;debug

第 2 個值,由於第二個值的左側,3 > 2, 但右側 3 < 4。所以這個值不適合。code

第 3 個值,左側:4 > 3, 右側 4 >3 這個值是合適的。圖片

從這裏咱們找到的規律是,進行一次遍歷,找到,若是隻的左側和右側同時小於這值,或者左側和右側都同時大於這個值,那麼這個值是合適的取值。

須要注意一個狀況就是 {-3, -3},你初始化數組的時候,這個值爲 {-3},那麼這個地方是最少有一個合適的值。

源代碼

源代碼和有關代碼的更新請訪問 GitHub:

https://github.com/cwiki-us/codebank-algorithm/blob/master/src/test/java/com/ossez/codebank/interview/tests/WayfairTest.java

測試類請參考:

https://github.com/cwiki-us/codebank-algorithm/blob/master/src/test/java/com/ossez/codebank/interview/tests/WayfairTest.java

代碼思路請參考:

/**
   * https://www.cwiki.us/display/ITCLASSIFICATION/Build+Castles
   */
  @Test
  public void testBuildCastles() {

    // int[] A = { -3, -3 };
    int[] A = { 2, 2, 3, 4, 3, 3, 2, 2, 1, 1, 2, 5 };

    int h = 0;
    int v = 0;

    List<Integer> nList = new ArrayList<Integer>();

    // Rebuild List
    nList.add(A[0]);
    for (int i = 0; i < A.length - 1; i++) {

      if (A[i] != A[i + 1]) {
        nList.add(A[i + 1]);
      }

    }

    // LOOP List to find right location
    for (int i = 0; i < nList.size() - 1; i++) {

      // COUNT 0
      if (i == 0) {
        if (nList.get(i) < nList.get(i + 1)) {
          v++;
        }
      } else {
        if (nList.get(i) < nList.get(i - 1) && nList.get(i) < nList.get(i + 1)) {
          v++;
        }

        if (nList.get(i) > nList.get(i - 1) && nList.get(i) > nList.get(i + 1)) {
          h++;
        }
      }
    }

    if (nList.size() == 1) {
      h++;
    } else if (nList.size() > 2 && nList.get(nList.size() - 1) > nList.get(nList.size() - 2)) {
      h++;
    }

    // CHECK
    logger.debug("V - [{}]", v);
    logger.debug("H - [{}]", h);

    logger.debug("H + V - [{}]", (h + v));

  }

 

 

測試結果

上面程序的測試結果以下:

2018/12/29 00:43:16 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - V - [2]

2018/12/29 00:43:16 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - H - [2]

2018/12/29 00:43:16 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - H + V - [4]

相關文章
相關標籤/搜索