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;
}
添加回答
举报