题目描述:两数之和

代码实现:Github


Java代码

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class Solution {
  4. /**
  5. * 暴力破解法,遍历整个数组,两两相加,最后得到结果
  6. * 时间复杂度 O(n^2) 空间复杂度 O(1)
  7. * @param nums
  8. * @param target
  9. * @return
  10. */
  11. public int[] Solution_01(int[] nums, int target) {
  12. int length = nums.length;
  13. for (int i = 0; i < length; ++i) {
  14. int first = nums[i];
  15. int j = i + 1;
  16. for (; j < length; ++j) {
  17. int second = nums[j];
  18. if (target == first + second) {
  19. return new int[]{i, j};
  20. }
  21. }
  22. }
  23. return new int[]{};
  24. }
  25. /**
  26. * 哈希表判断法,遍历一遍数组,每次判断目标值减去遍历到的值的差是否在哈希表中
  27. * 时间复杂度 O(n) 空间复杂度 O(n)
  28. * @param nums
  29. * @param target
  30. * @return
  31. */
  32. public int[] Solution_02(int[] nums, int target) {
  33. int length = nums.length;
  34. Map<Integer, Integer> map = new HashMap<>();
  35. for (int i = 0; i < length; ++i) {
  36. if (map.containsKey(target - nums[i])) {
  37. return new int[] {i, map.get(target - nums[i])};
  38. }
  39. map.put(nums[i], i);
  40. }
  41. return new int[] {};
  42. }
  43. }