Python编程实践操作教程:两数之和—Java和Python的代码对比
Python编程实践操作教程:两数之和,分别用Java和Python表现!伙伴们可以做个对比!
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]
解题思路:
暴力穷举:外循环遍历每个元素 x,内循环查找是否存在一个值与 target - x 相等的目标元素,返回相等的目标元素和 x 的索引。时间复杂度 O (n^2),效率太低,pass。哈希表:哈希映射(map、dict),key 保存该元素,value 保存该元素索引。
两次遍历法:第一次遍历把所有元素及其索引保存到哈希映射,第二次遍历查找 target - x 相等的目标元素一次遍历法:假如 y = target - x,则 x = target -y,所以一次遍历 在存入哈希映射的同时查找是否存在一个值与 target - x 相等的目标元素。例:nums=[2,11,7,15],target=9,hashmap={}遍历:i=0:target-x=9-2=7,7不存在于hashmap中,则x(2)加入hashmap,hashmap={2:0}i=1:target-x=9-11=-2,-2不存在于hashmap中,则x(-2)加入hashmap,hashmap={2:0,11:1}i=2:target-x=9-7=2,2存在于hashmap中,则返回列表[2,0]
代码:
两次遍历(Java):
classSolution{publicint[]twoSum(int[]nums,inttarget){Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){//一次遍历转换成键值对,key为元素值,value为索引值map.put(nums[i],i);}for(inti=0;i<nums.length;i++){//二次遍历查找符合条件的元素intres=target-nums[i];if(map.containsKey(res)&&map.get(res)!=i){//查找到的目标元素不能为其本身returnnewint[]{i,map.get(res)};}}returnnull;}}
一次遍历 (Java):
classSolution{publicint[]twoSum(int[]nums,inttarget){Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){intres=target-nums[i];if(map.containsKey(res)){//因为自身元素还未加入到hashmap,无需map.get(res)!=i条件判断returnnewint[]{i,map.get(res)};}map.put(nums[i],i);//未找到目标元素则将其加入hashmap}returnnull;}}
一次遍历 (Python):
classSolution:deftwoSum(self,nums:List[int],target:int)->List[int]:dic={}fori,numinenumerate(nums):#枚举nums数组ifnumindic:return[dic[num],i]else:dic[target-num]=i
利用 Python 数组自带 index 方法解题:
classSolution:deftwoSum(self,nums:List[int],target:int)->List[int]:fori,numinenumerate(nums):iftarget-numinnumsandnums.index(target-num)!=i:return[i,nums.index(target-num)]
list.index():
描述:
index () 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法:
index () 方法语法:
list.index(x,start,end)
参数:
x-- 查找的对象。start-- 可选,查找的起始位置。end-- 可选,查找的结束位置。返回:
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
有不清楚的地方可以留言或者私信!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。