刷题练习记录(1)——两数之和(JAVA 和 Python)

【题号001】两数之和 Two Sum

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

  给定 nums = [2, 7, 11, 15], target = 9

 

  因为 nums[0] + nums[1] = 2 + 7 = 9

  所以返回 [0, 1]

 

(1)Java版本

  (a)方法一:简单粗暴两次循环数组

【java数组知识】

https://www.cnblogs.com/ok932343846/p/6743699.html

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res=new int[2];
        int flag=0;
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                int sum=nums[i]+nums[j];
                if(sum==target){
                    res[0]=i;
                    res[1]=j;
                    flag=1;
                    break;
                }
            }
            if(flag==1){
                break;
            }
        }
        return res;
    }
}

  (b)方法二:使用HashMap进行一次循环(待补充)

【HashMap用法】【https://www.cnblogs.com/skywang12345/p/3310835.html

【迭代器用法】【这里没有用到】

====================================================================

******【在Java中的for循环中“i++”与“++i”的区别】******

https://blog.csdn.net/github_37847975/article/details/77369851】【节省计算时间】

https://blog.csdn.net/xialei199023/article/details/76383013

====================================================================

【代码参考】

【1】【https://www.cnblogs.com/grandyang/p/4606334.html

    【http://www.cnblogs.com/grandyang/p/4130379.html

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] index=new int[2];
        int tn=0;
        HashMap<Integer, Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;++i) {//java中在for循环里使用++i是是节省运算时间的哦
            tn=target-nums[i];
            if(map.containsKey(tn)&&map.get(tn)!=i) {
                index[0]=i;
                index[1]=map.get(tn);
                break;
            }
            map.put(nums[i], i);
        }        
        return index;
    }
}

 

(2)Python版本

    使用了字典dict,以及enumerate()函数将列表组合成一个序列索引

【字典用法】【https://www.cnblogs.com/rubylouvre/archive/2011/06/19/2084739.html

【enumerate用法】【http://www.runoob.com/python/python-func-enumerate.html

【关于程序入口“main”的使用】【https://blog.csdn.net/C_SESER/article/details/76100579

【关于“def”中的“self”用法】

【1】【https://www.cnblogs.com/jessonluo/p/4717140.html

【2】【https://blog.csdn.net/CLHugh/article/details/75000104

【3】【https://blog.csdn.net/daocaoren1543169565/article/details/80626035

【4】【https://blog.csdn.net/love666666shen/article/details/78189984

【5】【https://www.crifan.com/summary_python_variable_effective_scope/

=====================================================================

【代码参考】

【1】【https://www.cnblogs.com/qiaojushuang/p/8647705.html

    【https://github.com/JushuangQiao/Python-LeetCode/blob/master/50/1.py

【2】【https://www.jianshu.com/p/b71fc7307e42】          

# -*- coding:UTF-8 -*-

class Solution:
    def __init__(self):
        pass

    def twoSum(self, nums, target):
        dict={}
        for k, v in enumerate(nums):
            sub = target-v
            if sub in dict:
                return [dict[sub], k]
            dict[v] = k

    # twoSum2和上面的twoSum是一个意思,只不过我把变量名字改的更易懂
    def twoSum2(self, nums, target): # nums是列表list,dict是字典,对字典的更改删除:dict[键名]=键值
        dict={}
        for index, val in enumerate(nums):
            sub = target-val
            if sub in dict:
                return [dict[sub], index]
            dict[val] = index # 这里的dict[val]的val,成为了字典dict的键名


s = Solution()
res = s.twoSum(nums=[2, 7, 11, 13], target=9)
print res

if __name__ == "__main__":
    h = Solution()
    nums = [2, 7, 15, 17]
    target = 22
    res2 = h.twoSum(nums=nums, target=target)
    print res2
    print 'the answer is %s' % (h.twoSum(nums=nums, target=target))

 

posted @ 2018-11-14 16:07  anno_ym雨  阅读(324)  评论(0)    收藏  举报