【问题标题】:Find elements in array whose sum is equal to 10 - Java在数组中查找总和等于 10 的元素 - Java
【发布时间】:2015-11-13 01:10:58
【问题描述】:

我想从一个总和等于 10 的数组中找到所有的数字对,并尝试在此处改进这段代码:

for (int j = 0; j < arrayOfIntegers.length - 1; j++)
{
    for (int k = j + 1; k < arrayOfIntegers.length; k++)
    {
        int sum = arrayOfIntegers[j] + arrayOfIntegers[k];
        if (sum == 10)
            return j + "," + k;
    }
}

但是,我无法在阵列中移动。这是我到目前为止所拥有的:

int[] arrayOfIntegers = {0, 5, 4, 6, 3, 7, 2, 10};

Arrays.sort(arrayOfIntegers);
System.out.println(Arrays.toString(arrayOfIntegers));
int left = arrayOfIntegers[0]; 
int right = (arrayOfIntegers[arrayOfIntegers.length - 1]);

while (left < right) 
{ 
    int sum = left + right;

    if (sum == 10) //check to see if equal to 10
    {
        System.out.println(left + "," + right);
    }
    if (sum > 10) // if sum is more than 10, move to lesser number
    {
        right --;
    }
    if (sum < 10) // if sum is less than 10, move to greater number
    {
        left++;
    }
} // end of while

【问题讨论】:

  • 格式化您的代码。这是难以辨认的。
  • 你为什么这样做:if sum &gt; 10 then right--, if sum &lt; 10 then left++?您的左右是 value 而不是 index 到数组。即使它们是索引,你的数组也没有排序,这样做没有意义
  • 你到底想“改进”什么?...

标签: java arrays sorting


【解决方案1】:

通过传递总和和数组的值来尝试此代码,您希望在其中使用一个 for 循环找到一对元素等于给定总和

private void pairofArrayElementsEqualstoGivenSum(int sum,Integer[] arr){
    List numList = Arrays.asList(arr);
    for (int i = 0; i < arr.length; i++) {
        int num = sum - arr[i];
        if (numList.contains(num)) {
            System.out.println("" + arr[i] + " " + num + " = "+sum);
        }
    }
}

【讨论】:

    【解决方案2】:

    您需要捕获值以及索引:

        int[] arrayOfIntegers = {0, 5, 4, 6, 3, 7, 2, 10};
    
        Arrays.sort(arrayOfIntegers);
        System.out.println(Arrays.toString(arrayOfIntegers));
    
        int left = 0;
        int right = arrayOfIntegers.length - 1;
    
        while (left < right) 
        { 
            int leftVal = arrayOfIntegers[left]; 
            int rightVal = (arrayOfIntegers[right]);
            int sum = leftVal + rightVal;
    
            if (sum == 10) //check to see if equal to 10
            {
                System.out.println(arrayOfIntegers[left] + "," + arrayOfIntegers[right]);
                right --;
                left++;
            }
            if (sum > 10) // if sum is more than 10, move to lesser number
            {
                right --;
            }
            if (sum < 10) // if sum is less than 10, move to greater number
            {
                left++;
            }
        } // end of while
    

    输出:

    [0, 2, 3, 4, 5, 6, 7, 10]
    0,10
    3,7
    4,6
    

    【讨论】:

    • 我尝试了您的代码,但仍然没有成功。
    【解决方案3】:

    这是 javascrypt 的示例代码。有人可以使用它

     var arr = [0, 5, 4, 6, 3, 7, 2, 10]
     var arr1 = arr;
    
     for(var a=0; a<arr.length;a++){
      for(var b=0; b<arr.length; b++){
    
        if(arr[a]+arr[b]===10 && a!==b){
       
          console.log(arr[a]+" + "+arr[b])
          arr.splice(a,1);
    
        }
      }
     }
    

    【讨论】:

      【解决方案4】:

      Java - Using single loop

      public static void findElements() {
      
          List<Integer> list = List.of(0, 5, 4, 6, 3, 7, 2, 10);
      
          for (int i = 0; i < list.size(); i++) {
      
              int sum = 0;
              if (i < list.size() - 1) {
      
                  sum = list.get(i) + list.get(i + 1);
                  if (sum == 10) {
                      System.out.println("Element: " + list.get(i) + "," + list.get(i + 1));
                  }
      
              } else {
                  if (list.get(i) == 10) {
                      System.out.println("Element: " + list.get(i));
                  }
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 2014-09-07
        相关资源
        最近更新 更多