zoukankan      html  css  js  c++  java
  • [LeetCode 001] Two Sum

    Two Sum

    • HashMap中存储numbers[i]尚需要都少数值达到target,以及下表i

    Implementation

    public class Solution {
        public int[] twoSum(int[] numbers, int target) {
        	HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        	int[] result = new int[2];
        	for (int i = 0; i < numbers.length; i++) {
        		if (map.containsKey(numbers[i])) {
        			int index = map.get(numbers[i]);
        			result[0] = index;
        			result[1] = i;
        			break;
        		} else {
        			map.put(target - numbers[i], i);
        		}
        	}
        	return result;
        }
    }
    

    Two Sum II - Input array is sorted

    • 设置两个指针j指向最大值,i指向最小值
      • sum > target: jdecrease
      • sum < target: iincrease

    Implementation

    public class Solution {
        public int[] twoSum(int[] numbers, int target) {
            int left = 0;
            int right = numbers.length - 1;
            int[] result = new int[2];
            while (left < right) {
                int sum = numbers[left] + numbers[right];
                if (sum == target) {
                    result[0] = left + 1;
                    result[1] = right + 1;
                    break;
                } else if (sum < target) {
                    left++;
                } else {
                    right--;
                }
            }
            return result;
        }
    }
    

    Two Sum III - Data structure design

    • 设置一个ArrayList保存出现过的不重复的数值。
      • 遍历的时候比使用HashMapkeySet()更快
    • 设置一个HashMap保存出现过得不重复的数值,以及出现次数。
    • find()函数
      • 当value需要两个相同的数值得到时,判断该数值出现的次数是否大于1
      • 否则,判断HashMap是否包含这两个数值

    Implementation

    public class TwoSum {
        private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        private ArrayList<Integer> list = new ArrayList<Integer>();
        // Add the number to an internal data structure.
    	public void add(int number) {
    	    if (map.containsKey(number)) {
    	        map.put(number, map.get(number) + 1);
    	    }
    	    else {
    	        map.put(number, 1);
    	        list.add(number);
    	    }
    	}
    
        // Find if there exists any pair of numbers which sum is equal to the value.
    	public boolean find(int value) {
    	    for (int i = 0; i < list.size(); i++) {
    	        int num1 = list.get(i);
    	        int num2 = value - num1;
    	        if ((num1 == num2 && map.get(num1) > 1) || (num1 != num2 && map.containsKey(num2))) {
    	            return true;
    	        }
    	    }
    	    return false;
    	}
    }
    
  • 相关阅读:
    Delphi 与 DirectX 之 DelphiX(28): TDIB.Emboss;
    Delphi 与 DirectX 之 DelphiX(29): TDIB.AddMonoNoise();
    Delphi 与 DirectX 之 DelphiX(33): TDIB.SmoothRotateWrap();
    如何用w.bloggar从桌面发表文章
    可以插入图片了
    在首页可以查看阅读次数了
    .Text的MainFeed.aspx生成RSS的问题
    首页文章显示说明
    欢迎光临博客园
    如果想学习.Net Remoting,请看看MSDN上的一篇文章
  • 原文地址:https://www.cnblogs.com/Victor-Han/p/5192407.html
Copyright © 2011-2022 走看看