枚举

遍历两次,时间复杂度:O(N^2),空间复杂度O(1)

  1. var twoSum = function(nums, target) {
  2. for(let i = 0; i <= nums.length; i++){
  3. for(let j = i + 1; j <= nums.length; j++){
  4. if(nums[i] + nums[j] === target){
  5. return [i,j]
  6. }
  7. }
  8. }
  9. };

数组方法

数组的方法好像都是通过遍历的,时间复杂度更高了

  1. var twoSum = function(nums, target) {
  2. for(let i = 0; i <= nums.length; i++){
  3. if(nums.includes(target - nums[i], i+1)){
  4. return [i, nums.indexOf(target - nums[i], i+1)]
  5. }
  6. }
  7. };

哈希表

使用map集合,时间复杂度是O(n),空间复杂度O(n),hash解构时间复杂度O(1),空间复杂度O(n)

  1. var twoSum = function(nums, target) {
  2. const map = new Map()
  3. for(let i = 0; i < nums.length; i++){
  4. if(map.has(target -nums[i])){
  5. return [map.get(target -nums[i]) ,i]
  6. }
  7. map.set(nums[i], i)
  8. }
  9. };

拓展

上面的只能输出一组结果,如果要输出所有的,以枚举方式为例可参考下面的

  1. var twoSum = function (nums, target) {
  2. const arr = []
  3. for (let i = 0; i <= nums.length; i++) {
  4. for (let j = i + 1; j <= nums.length; j++) {
  5. if (nums[i] + nums[j] === target) {
  6. arr.push([i, j])
  7. }
  8. }
  9. }
  10. return arr
  11. }