1.Two Sum

作者: soleil阿璐 | 来源:发表于2017-10-13 15:58 被阅读0次

    题目

    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, and you may not use the same element twice.

    就是给你一个数组和一个目标数字,返回加和等于目标数字的两个元素在数组中的位置

    解法一 暴力循环 O(n^2)

    取数组中的一个元素,并对后面的所有元素进行遍历,看是否存在和此元素加和等于目标数字的元素。

     public int[] twoSum(int[] nums, int target) {
            int[] result = {-1,-1};
            boolean finish = false;
            
            for(int i=0;i<nums.length-1;i++){
                if(finish){
                    break;
                }
                int temp = target - nums[i];            
                for(int j=i+1;j<nums.length;j++){
                    if(nums[j]==temp){
                            finish = true;
                            result[1] = j;
                            result[0] = i;
                            break;
                    }
                }
            }
            
            return result;
        }
    

    解法二 HashMap

    利用hashmap数据结构的特点,只需要遍历一次就可以完成搜索
    对数组进行遍历,在建好的hashmap中查找是否满足加和为目标数的元素,如果没有,则将此元素加入hashmap。
    hashmap中存储的是key是数组元素,value是index

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

    相关文章

      网友评论

          本文标题:1.Two Sum

          本文链接:https://www.haomeiwen.com/subject/yvlzyxtx.html