剑指OfferII006.排序数组中两个数字之和

题目

给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,

所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。

假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。

示例 1:输入:numbers = [1,2,4,6,10], target = 8 输出:[1,3]

解释:2 与 6 之和等于目标数 8 。因此 index1 = 1, index2 = 3 。

示例 2:输入:numbers = [2,3,4], target = 6 输出:[0,2]

示例 3:输入:numbers = [-1,0], target = -1 输出:[0,1]

提示:2 <= numbers.length <= 3 * 104

-1000 <= numbers[i] <= 1000

numbers 按 递增顺序 排列

-1000 <= target <= 1000

仅存在一个有效答案

注意:本题与主站 167 题相似(下标起点不同)

解题思路分析

1、暴力法;时间复杂度O(n^2),空间复杂度O(1)

func twoSum(numbers []int, target int) []int {
   m := make(map[int]int, len(numbers))
   for i, n := range numbers {
      if m[target-n] != 0 {
         return []int{m[target-n] - 1, i}
      }
      m[n] = i + 1
   }
   return nil
}

2、哈希;时间复杂度O(n),空间复杂度O(n)

func twoSum(nums []int, target int) []int {
   m := make(map[int]int, len(nums))
   for k, v := range nums {
      m[v] = k
   }

   for i := 0; i < len(nums); i++ {
      b := target - nums[i]
      if num, ok := m[b]; ok && num != i {
         return []int{i, m[b]}
      }
   }
   return []int{}
}

3、哈希;时间复杂度O(n),空间复杂度O(n)

func twoSum(nums []int, target int) []int {
   for i := 0; i < len(nums); i++ {
      for j := i + 1; j < len(nums); j++ {
         if nums[i]+nums[j] == target {
            return []int{i, j}
         }
      }
   }
   return []int{}
}

4、双指针;时间复杂度O(n),空间复杂度O(1)

剑指OfferII006.排序数组中两个数字之和

func twoSum(numbers []int, target int) []int {
   first := 0
   last := len(numbers) - 1
   result := make([]int, 2)

   for {
      if numbers[first]+numbers[last] == target {
         result[0] = first
         result[1] = last
         return result
      } else if numbers[first]+numbers[last] > target {
         last--
      } else {
         first++
      }
   }
}

总结

Easy题目,题目同leetcode 167.两数之和 II - 输入有序数组

展开阅读全文

页面更新:2024-05-29

标签:之和   序数   升序   下标   整数   数组   函数   排列   个数   题目   形式   答案   两个   目标   数字   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top