亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定一個整數數組,如果數字序列 1、2、3 出現在數組中的某處,則返回 true

給定一個整數數組,如果數字序列 1、2、3 出現在數組中的某處,則返回 true

慕尼黑5688855 2023-08-23 17:20:07
基本上我試圖返回 true,如果數組中按特定順序排列 1、2、3,我無法弄清楚如何做到這一點。我已經嘗試過使用一些 for 循環和 if 語句,但我不知道這實際上是否是最好的方法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 + i] == 3){           return true;       }   }   return false;}僅當 1、2、3 位于數組中時才返回 true 我希望僅當 1、2、3 處于特定順序時才返回 true在此處輸入圖像描述
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

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;

}

該解決方案的復雜度為 O(n)。


查看完整回答
反對 回復 2023-08-23
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

您當前的代碼有很多問題。

  • true針對每個案件都返回。

  • 您創建了一個result變量,但從未對其執行任何操作。

  • 當您只能使用一個循環時,您就創建了三個循環。

  • 您實際上從未檢查過這些值是否彼此相鄰。

對于第一個問題,return true 只有當它們1, 2, 3彼此相鄰時我們才會這樣做,return false;對于其他所有情況也是如此。這是通過使用return false;after 循環來完成的。

對于下一個問題,result不需要,你實際上不需要計算任何東西,所以刪除它。

對于第三個問題,將所有循環合并為一個循環。但是,我們需要循環到 的條件nums.length - 2而不是 ,length因為我們將同時比較 3 個值,并且我們不想得到ArrayOutOfBoundsException。

最后,要檢查所有值是否彼此相鄰,只需將當前數組索引處的值、下一個索引值以及索引上的兩個值分別與 1、2 和 3 進行比較即可。

這看起來像if (nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3)。如果是這種情況true,我們會return true立即。

以下是經過所有這些修復后代碼的外觀:

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;

}

測試運行:

真的

錯誤的

注意:如果您需要在上下文中使用它,請static從 中 刪除,我曾經在我的.arrayOneTwoThree(int [] nums)non-staticstaticmain


查看完整回答
反對 回復 2023-08-23
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

請嘗試這個解決方案,您也許能夠解決所有測試用例


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;

    }


查看完整回答
反對 回復 2023-08-23
  • 3 回答
  • 0 關注
  • 355 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號