双指针

1.Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
题目描述:在有序数组中找出两个数,使它们的和为 target。

解法1:

  public int[] twoSum(int a[], int target) {
      int left = 0;
      int right = a.length - 1;
      while (left < right) {
          int sum = a[left] + a[right];
          if (target == sum) {
              return new int[] { left + 1, right + 1 };
          } else if (target > sum) {
              left++;
          } else {
              right--;
          }
      }
      return null;
  }

解法2:

public int[] twoSums(int a[], int target) {
     for (int i = 0; i < a.length; i++) {
         // int left=a[i];
         for (int j = i + 1; j < a.length; j++) {
             int sum = a[i] + a[j];
             if (target == sum) {
                 return new int[] { i + 1, j + 1 };
             }
             // else if(ta)
         }
     }
     return null;
 }

解法1用的是双指针,时间复杂度为O(N),解法2时间复杂度O(N^2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。