1.两数只和.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * @Description:
  3. * @Autor: kindring
  4. * @Date: 2022-05-17 09:55:38
  5. * @LastEditors: kindring
  6. * @LastEditTime: 2022-05-17 10:47:27
  7. * @LastDescript:
  8. */
  9. // 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
  10. // 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
  11. // 你可以按任意顺序返回答案。
  12. // 来源:力扣(LeetCode)
  13. // 链接:https://leetcode.cn/problems/two-sum
  14. // 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  15. // let nums = [2, 7, 11, 15],
  16. // target = 9;
  17. /**
  18. * 两数之和,时间优先,可优化
  19. * @param {*} _nums
  20. * @param {*} _target
  21. * @returns
  22. */
  23. function answer1(_nums, _target) {
  24. let map = new Map();
  25. for (let i = 0; i < _nums.length; i += 2) {
  26. if ((_nums[i] + _nums[i + 1]) == _target) {
  27. return [i, i + 1]
  28. } else if ((_nums[i] + _nums[i - 1]) == _target) {
  29. return [i, i - 1]
  30. } else {
  31. if (map.has(_target - _nums[i - 1])) {
  32. console.log('1');
  33. if (map.get(_target - _nums[i - 1]) != i - 1) {
  34. return [map.get(_target - _nums[i - 1]), i - 1]
  35. }
  36. } else if (map.has(_target - _nums[i])) {
  37. return [map.get(_target - _nums[i]), i];
  38. } else if (map.has(_target - _nums[i + 1])) {
  39. return [map.get(_target - _nums[i + 1]), i + 1];
  40. }
  41. }
  42. map.set(map.set(_nums[i - 1], i - 1));
  43. map.set(map.set(_nums[i], i));
  44. map.set(map.set(_nums[i + 1], i + 1));
  45. }
  46. }
  47. // 空间优先
  48. function answer2(_nums,_target){
  49. let i = 0;
  50. while (true) {
  51. _target - _nums[i];
  52. i++;
  53. }
  54. }
  55. console.log(answer1([3, 2, 4], 6));
  56. console.log(answer1([2, 7, 11, 15], 9));;
  57. console.log(answer1([-1, -2, -3, -4, -5], -8));; //[2,4]]