zoukankan      html  css  js  c++  java
  • [Daily Coding Problem] 1 (LeetCode 1). Find if two numbers in an array add up to k

    This problem was recently asked by Google.

    Given a list of numbers and a number k, return whether any two numbers from the list add up to k.

    For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.

    Bonus: Can you do this in one pass?

    经典2-sum问题的变形.  最直观的做法是first pass, 用HashMap保存每个数和其index的mapping关系, 然后second pass来寻找是否有满足要求的。 需要注意的一点是,同一个位置的数字不能使用两次.

     1 public class Solution {
     2     public int[] twoSum(int[] nums, int target) {
     3         Map<Integer, Integer> hm = new HashMap<Integer, Integer>();
     4         for(int i = 0; i < nums.length; i++)
     5         {
     6             hm.put(nums[i], i);
     7         }
     8         
     9         for(int i = 0; i < nums.length; i++)
    10         {
    11             if(hm.containsKey(target - nums[i]) && i != hm.get(target - nums[i]))
    12             {
    13                 int[] r = new int[2];
    14                 r[0] = i;
    15                 r[1] = hm.get(target - nums[i]);
    16                 return r;
    17             }
    18         }
    19         return null;
    20     }
    21 }

    1 pass solution 就是一边扫描数组, 一边更新Map。 如果找到满足要求的pair, 直接返回, 否则把当前的数插入到Map中.

     1 public class Solution {
     2     public int[] twoSum(int[] nums, int target) {
     3         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
     4         for(int i = 0; i < nums.length; i++) {
     5             if(map.containsKey(target - nums[i])) {
     6                 int[] r = new int[2];
     7                 r[0] = map.get(target - nums[i]);
     8                 r[1] = i;
     9                 return r;
    10             }
    11             else {
    12                 map.put(nums[i], i);
    13             }
    14         }
    15         return null;
    16     }
    17 }
  • 相关阅读:
    反悔贪心 学习笔记
    「CF901C」Bipartite Segments 题解
    「HEOI2015」公约数数列 题解
    拓展欧拉定理
    莫比乌斯反演题目选做
    八月水题录
    chapt15、使用虚拟内存
    chapt16、线程堆栈
    chapt14、探索虚拟内存
    get files version by vbs
  • 原文地址:https://www.cnblogs.com/lz87/p/10106326.html
Copyright © 2011-2022 走看看