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)。

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-static
static
main

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;
}
添加回答
舉報