刷题练习记录(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数组知识】
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】
====================================================================
【代码参考】
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】
# -*- 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))

浙公网安备 33010602011771号