2016-12-31 43 views
1

我們會說數組3中緊接着3是一個「不幸」 1.如果給定數組在數組中的前2個或後2個位置包含不幸1,則返回true。CodingBat-Excercise:如果給定數組在數組中的前2位或後2位中包含1,則返回true

的鍛鍊; Tibial可以在這裏找到:

http://codingbat.com/prob/p197308

我自己的方法是這樣的:

public boolean unlucky1(int[] nums) { 

    for (int i = 0; i < nums.length-1; i++) { 
    if (nums[i] == 1 && nums[i+1] == 3) 
     return true; 
    } 
    return false; 
} 

這適用於除[1,1,1每個數組,3,1]。現在我明白爲什麼它不適用於這個數組,但爲什麼它對[2,1,3,4,5]有效呢?這個數組在前兩個或最後一個位置沒有1,後面跟着3。我得到這個練習是否錯誤?

回答

1

問題定義是

在第一2個或最後2個位置

**[X,X,.......,X,X]** 
    \/  \/
    first  last 
    2   2 
positions positions 

X標記的位置在哪裏不幸的1可以位於位置1 。

[2,1 ,3,...,4,5]

[X,X,.......,X,X]

不幸的1是在前兩個元件。

1

它看起來並不像你遵守規則。您不需要遍歷整個數組。你應該只測試前兩個和後兩個元素。

編輯:

再次閱讀練習,看來你應該返回真,即使1後面3是數組的索引1和2(因爲要求是不吉利的1或者是在前兩個或後兩個職位 - 3個職位不一定在前兩個職位)。

public boolean unlucky1(int[] nums) { 
    if (nums.length > 1) { 
    if (nums[0] == 1 && nums[1] == 3) 
     return true; 
    if (nums[nums.length-2] == 1 && nums[nums.length-1] == 3) 
     return true; 
    } 
    if (nums.length > 2 && nums[1] == 1 && nums[2] == 3) { 
    return true; 
    } 
    return false; 
} 
相關問題