• 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 }
  • 相关阅读:
    Android Studio代码自己主动检測错误提示
    uva 1567
    UWP 新手教程2——怎样实现自适应用户界面
    远程服务的使用场景
    本地服务和远程服务
    本地应用调用远程服务中的方法
    混合方式开启服务
    绑定服务抽取接口
    绑定服务调用服务里的方法
    bind绑定服务的生命周期
  • 原文地址:https://www.cnblogs.com/LilyLiya/p/14224730.html
Copyright © 2020-2023  润新知