【LeetCode刷题】——两数之和.1

时间:2024-07-30 00:06:08

---恢复内容开始---

一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西,

就记录一下遇到的问题。

  首先是题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对

应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

  先看下自己写出来的代码:

  【LeetCode刷题】——两数之和.1

  可以看出编程的思想还是很原始的。运行时出现了问题:

1.

【LeetCode刷题】——两数之和.1

这其实是数组越界问题,问题的原因在于,数组定义是从0到length-1的,而当我的i=length的时候就已经超出了数组的最大表示范围,所以显示数组越界。

其实我觉得这和我这段时间用verilog写硬件有关系,因为用那个的时候for循环里面都是用的<=,实际上我在for(;;)里面也用逗号进行的分隔(真的是

功夫不到家)。那么这是第一个错误。实际上这里还有一个错误,就是i的初始值应该为0。

2.这时出现了第二个错误:

【LeetCode刷题】——两数之和.1

这个错误的意思是没有返回值,我们发现,在数组内部没有两个数的和是target时是没有返回值的。所以在这里加上return null。

这里就运行成功了。

再来看下大佬的代码:

【LeetCode刷题】——两数之和.1

发现这里面有一行

【LeetCode刷题】——两数之和.1

这里面有一个throw的用法,throw是用来抛出异常状态的,改天另写一篇关于学习throw的,然而我在运行大佬代码的时候发现,会显示

【LeetCode刷题】——两数之和.1

这个地方其实不是原来代码出现问题了,而是上文说的,初始化i应该=0,而我原来的代码里i=1,这里为什么会输出这样的结果呢?

我认为是这样,我们测试用的数组是【2,7,11,15】,target 9

这样在运行的时候,因为是从7开始检索的,那么显然循环中没有发现和为9的两个数,于是开始运行throw语句,抛出了异常:IllegalArguementException