java 167中超出Leetcode时间限制,两个Sum II -输入数组已排序[已关闭]

klr1opcd  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(195)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2天前关闭。
Improve this question
实际上我是LeetCode的新手,但想问一下为什么我的代码不工作?这里是我的代码,哪里是我的错,我认为在提交之前,ıt是完美无瑕的。

class Solution {
  public int[] twoSum(int[] numbers, int target) {
    int i = 0;
    int j = i + 1;
    while (i < numbers.length - 1 && j < numbers.length) {
      if (numbers[i] + numbers[j] == target) {
        return new int[] { i + 1, j + 1 };
      } else if (j != numbers.length - 1) {
        j++;
      } else {
        i++;
        j = i + 1;
      }
    }
    return null;
  }
}
xriantvc

xriantvc1#

由于数组已排序,因此可以使用两个指针。

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

ia2d9nvy2#

下面是使用HashMap数据结构的解决方案-运行时:2毫秒内存使用:42.9兆字节

class Solution {
                public int[] twoSum(int[] nums, int target) {
                    HashMap<Integer, Integer> map = new HashMap<>();
                    int res[] = new int[2];
                    for (int i = 0; i < nums.length; i++) {
                        if (map.containsKey(target - nums[i])) {
                            res[0] = i;
                            res[1] = map.get(target - nums[i]);
                            return res;
                        } else {
                            map.put(nums[i], i);
                        }
                    }

                    return res;
                }
            }

相关问题