• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LilyLiya
博客园    首页    新随笔    联系   管理    订阅  订阅
two number sum

Refer to : https://www.algoexpert.io/questions/Two%20Number%20Sum


Two number sum

1. problem statement.

给定一个不含重复数字的数组和一个目标值,返回一个长度为2的数组,这个数组包含的两个数的和要等于目标值,原数组里面的值不能重复使用,如果没有这样的两个值使得它们的和等于目标值,返回空数组。

2. brute force(O(n^2), O(1))

1 def twoNumberSum(array, targetSum):
2     for i in range(len(array)-1):
3         for j in range(i+1, len(array)):
4             if array[i] + array[j] == targetSum:
5                 return[array[i], array[j]]
6     return[]
 1 class Program {
 2   public static int[] twoNumberSum(int[] array, int targetSum) {
 3     
 4         for(int i = 0; i < array.length-1; i++){
 5             for(int j = i+1; j < array.length; j++){
 6                 if(array[i] + array[j] == targetSum){
 7                     return new int[] {array[i], array[j]};
 8                 }
 9             }
10         }
11     return new int[0];
12   }
13 }

3. hash map(O(n), O(n))

1 def twoNumberSum(array, targetSum):
2     nums = {}
3     for num in array:
4         b = targetSum - num
5         if b in nums:
6             return[b, num]
7         else:
8             nums[num] = True //mark the num as true.
9     return[]
 1 class Program {
 2   public static int[] twoNumberSum(int[] array, int targetSum) {
 3     HashSet<Integer> set = new HashSet<>();
 4         for(int i: array){
 5             int j = targetSum - i;
 6             if(set.contains(j)){
 7                 return new int[] {i,j};
 8             }else{
 9                 set.add(i);
10             }
11         }
12     return new int[0];
13   }
14 }

4. Sort && Pointers(O(nlogn), O(1))

 1 def twoNumberSum(array, targetSum):
 2     array.sort()
 3     left = 0
 4     right = len(array)-1
 5     while left<right:
 6         if array[left] + array[right] == targetSum:
 7             return [array[left], array[right]]
 8         elif array[left] + array[right] > targetSum:
 9             right -= 1
10         elif array[left] + array[right] < targetSum:
11             left += 1
12     return[]
 1 class Program {
 2   public static int[] twoNumberSum(int[] array, int targetSum) {
 3     Arrays.sort(array);
 4         int left = 0, right = array.length-1;
 5         while(left < right){
 6             int currSum = array[left] + array[right];
 7             if(currSum == targetSum){
 8                 return new int[] {array[left], array[right]};
 9             }else if(currSum > targetSum){
10                 right--;
11             }else if(currSum < targetSum){
12                 left++;
13             }
14         }
15     return new int[0];
16   }
17 }

 

posted on 2021-01-03 06:09  LilyLiya  阅读(87)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3