Leetcode(一):Two Sum

介紹算法

越往基礎和底層學習,就愈加的發現數據結構和算法的魅力,這些曾經在大學時候極爲討厭的兩門枯燥乏味的學科,想不到現在也會慢慢的開始喜歡,因此從今天開始試着刷刷Leetcode的題目,雖然上班後的時間並不寬鬆,但只要像寫博文同樣,堅持下來,哪怕一天刷一道題,或者幾天刷一道題 我相信總有會讓人欣慰的收穫!sql

對於Leetcode網上已經有不少出色的解題思想和博文,因此我寫博客的更多初衷是爲了本身養成學習中不斷記錄的習慣,也但願在之後忘記的時候能夠拿出來翻翻看。shell

目的

Leetcode是國外的一個網站,提供算法、sql、shell性能的題庫測試,基本上在國外的大公司都必需要求的門檻,如今算法題總共有343道題目,爲了提升自身水平,我也嘗試着學習學習,但願本身愈來愈厲害,哈哈,有興趣的你們一塊兒刷。還能夠討論討論 交換思路。數組

Two Sum

  • 題目:數據結構

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.數據結構和算法

    You may assume that each input would have exactly one solution.性能

    Example:學習

    Given nums = [2, 7, 11, 15], target = 9,測試

    Because nums[0] + nums[1] = 2 + 7 = 9,網站

    return [0, 1].

    UPDATE (2016/2/13): The return format had been changed to zero-based indices. Please read the above updated description carefully.

  • 解題:new Map<Integer,Integer>(),迭代nums數組元素,檢查當前Index元素是否在Map中,若是在返回value與當前Index的數組,若是不在使用target減去當前元素,而後把差放到map中(map.put(差,當前Index);

    public class Solution {

     public int[] twoSum(int[] nums, int target) {

        if(nums==null||nums.length==0)return null;
        Map<Integer,Integer> temp=new HashMap<Integer,Integer>();
        int[] result=new int[2];
        for(int i=0;i<nums.length;i++){
            int num=nums[i];
            if(temp.containsKey(num)){
                result[0]=temp.get(num);
                result[1]=i;
                return result;
            }
            int substract= target-num;
            temp.put(substract,i);
        }
        return null;
        }
    }
  • 複雜度:O(n)的時間,O(n)的內存

  • 測試結果:


  • 思惟發散:大夥能觸類旁通的想到其餘相似結果嗎?

注:版權全部轉載請註明出處http://my.oschina.net/ambitor/blog/662408,做者:Ambitor

相關文章
相關標籤/搜索