基于Java中的另一个数组创建一个新数组

时间:2018-03-14 19:00:40

标签: java arrays

这只返回数组a。我需要做一个等于数组a的数组但是当元素是3的倍数时,我需要添加下一个偶数。像a = [1,3,4,6,1],数组看起来像[1,7,4,6​​,1]。我该怎么办?谢谢。

public static void main(String[] args) {
        int[] a = new int[]{10, 46, 78, 32, 3, 80, 97, 11, 39, 57};
        System.out.println(Arrays.toString(a)); 
}
public static int[] multiplos3 (int[] a){  
        int[] b = new int[a.length];
        int j = 0;
        for (int i = 0 ; i < a.length; i++){  
            if (a[i] % 3 == 0){  
              if(a[i + 1] % 2 == 0) {
                  b[j] = a[i] + a[i + 1];  
                  j++;
              }
            }  
        }
      System.out.println(Arrays.toString(b));
      return b; 
  }
}

基于评论:

  public static void multiplos3 (int[] a){  
      int[] b = new int[a.length]; System.arraycopy(a, 0, b, 0, a.length);
      for (int i = 0 ; i < a.length; i++){  
          if (a[i] % 3 == 0){  
              for(int j = i + 1; j < a.length; j++){
                  if(a[j] % 2 == 0) {
                      b[i] = a[i] + a[j]; 
                      break;
                  }
              }  
          }
     }
      System.out.println(Arrays.toString(b));
  }

............................................... .....

2 个答案:

答案 0 :(得分:0)

不要使用a[i + 1],而是尝试使用另一个for循环来查找下一个偶数

for(int j = i + 1; j < a.length; j++)
    if(a[j] % 2 == 0)
    {
        [...]
        break; //stop the loop after the first even number
    }

答案 1 :(得分:-1)

上述代码的运行时复杂度为O(N ^ 2)

首先使用附加数组

,可以在O(N)中实现

尝试通过遍历最后一个

来填充下一个偶数数组

以下是代码

public static void multiplos3 (int[] a){  
    int[] b = new int[a.length];              
    int[] nextEvnNosArr = new int[a.length];
    for (int i = a.length - 2; i > 0; i++) {
        if (a[i] %2 == 0) {
            nextEvnNosArr[i] = a[i];
        } else {
            if (nextEvnNosArr[i + 1] % 2 == 0) {
                nextEvnNosArr[i] = nextEvnNosArr[i+1];
            } else {
                nextEvnNosArr[i] = -1;
            }
        }
    }
    for (int i = 0 ; i < a.length; i++){  
              if (a[i] % 3 == 0){  
                  if (i != a.length - 1 && nextEvnNosArr[i + 1] != -1){ 
                      b[j] = a[i] + nextEvnNosArr[i + 1];  
                      j++;
                  }
              }
         }
    }
    System.out.println(Arrays.toString(b));
}