LeetCode题一 两数之和
作为数据结构课的一个作业,再来跟着老师的节奏刷一遍力扣,这次希望很多题目能自己独立地解出来,并且优化自己的算法。前期还是用java写,在后期的话就尽量用python写,为之后学机器学习尽可能多打一点基础吧。
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
链接: 力扣.
方法一:暴力遍历
- 我的代码如下:
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0; i<nums.length;i++)
{
for(int j=i+1;j<nums.length;j++)
{
if(nums[i]+nums[j]==target)
{return new int[]{i,j};}
}
}
throw new IllegalArgumentException("can not find");
}
}
这个方法还是比较容易想的,缺点就是时间复杂度太大了。
我有两次错的地方,一个是第五行for循环里用的是“j=i”,这样是不行的,
因为会造成重复利用数组中的元素;
另一个是因为最后的输出结果要求是int[],这是我平常不太这样写的,所
以return null和return 0是不被允许的,要是依据本题题意target无法被满
足,得用throw new IllegalArgumentException表示抛出非法数据异常。
方法二:两次哈希表
来源:CSDN
作者:一鸣真鲜
链接:https://blog.csdn.net/weixin_45568367/article/details/104383476