2020.2.18

陌路散爱 提交于 2020-02-24 03:00:08

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表示抛出非法数据异常。

在这里插入图片描述

方法二:两次哈希表

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!