3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
public boolean arrayOneTwoThree(int[] nums) {
// variables declaration.
boolean result = false;
int counter = 0,index = 0;
int arr[] = {1,2,3};
// base condition check. like array length should not be less than 3.
if(nums.length < 3){
return result;
}
//for loop for iterating over array and finding desired pattern
for(int i = 0; i < nums.length; i++){
//pattern found in array
if(counter == 3){
result = true;
return result;
}
if(nums[i] == arr[counter]){
index++;
counter++;
}
else if(counter != 0){
i = index-1;
counter = 0;
}
}
if (counter == 3) {
result = true;
return result;
}
return result;
}
該解決方案的復(fù)雜度為 O(n)。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
您當(dāng)前的代碼有很多問題。
您
true
針對每個(gè)案件都返回。您創(chuàng)建了一個(gè)
result
變量,但從未對其執(zhí)行任何操作。當(dāng)您只能使用一個(gè)循環(huán)時(shí),您就創(chuàng)建了三個(gè)循環(huán)。
您實(shí)際上從未檢查過這些值是否彼此相鄰。
對于第一個(gè)問題,return true
只有當(dāng)它們1, 2, 3
彼此相鄰時(shí)我們才會這樣做,return false;
對于其他所有情況也是如此。這是通過使用return false;
after 循環(huán)來完成的。
對于下一個(gè)問題,result
不需要,你實(shí)際上不需要計(jì)算任何東西,所以刪除它。
對于第三個(gè)問題,將所有循環(huán)合并為一個(gè)循環(huán)。但是,我們需要循環(huán)到 的條件nums.length - 2
而不是 ,length
因?yàn)槲覀儗⑼瑫r(shí)比較 3 個(gè)值,并且我們不想得到ArrayOutOfBoundsException
。
最后,要檢查所有值是否彼此相鄰,只需將當(dāng)前數(shù)組索引處的值、下一個(gè)索引值以及索引上的兩個(gè)值分別與 1、2 和 3 進(jìn)行比較即可。
這看起來像if (nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3)
。如果是這種情況true
,我們會return true
立即。
以下是經(jīng)過所有這些修復(fù)后代碼的外觀:
public static void main(String[] args) {
// test cases
int [] arr = {1, 1 ,2, 1, 2, 3};
System.out.println(arrayOneTwoThree(arr));
int [] arr2 = {3, 2, 3};
System.out.println(arrayOneTwoThree(arr2));
}
public static boolean arrayOneTwoThree(int[] nums) {
for(int i = 0; i < nums.length - 2; i++) {
if(nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3){
return true;
}
}
return false;
}
測試運(yùn)行:
真的
錯(cuò)誤的
注意:如果您需要在上下文中使用它,請static
從 中 刪除,我曾經(jīng)在我的.arrayOneTwoThree(int [] nums)
non-static
static
main

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
請嘗試這個(gè)解決方案,您也許能夠解決所有測試用例
public static boolean find123(List<Integer> numbers) {
boolean isOneExist=false;
boolean isTwoExist=false;
boolean isThreeExist=false;
for(Integer n1:numbers)
{
if(n1==1)
{
isOneExist=true;
}
if(n1==2 && isOneExist)
{
isTwoExist=true;
}
if(n1==3 && isTwoExist)
{
isThreeExist=true;
}
}
if(isOneExist && isTwoExist && isThreeExist)
{
return true;
}
return false;
}
添加回答
舉報(bào)