使用三种算法来解决Two-Sum问题
两数之和
在给定的数组内, 求其中两个数是否和给定的一个数相等
例
1 | // 判断nums中某两个数相加是否等于target |
算法1
1 | public boolean twoSum(int[] nums, int tg) { |
解释
size是nums的长度, 也就是5, 那第一个循环中, i的值为0~4
第二个循环中, j为i的前面的所有值
- i=0(数组中为2), j不存在
- i=1(数组中为4), j=0(数组中为2)
- i=2(数组中为6),j=0(数组中为2),1(数组中为4), 此时(j=1)+(i=2)等于target(10)
…
也就是第一层循环遍历每一层, 第二层循环依次拿之前的数字和当前数字进行相加比较
算法2
1 | public boolean twoSum(int[] nums, int tg) { |
解释
使用一个记事本, 记录下获取过的数值
使用目标值target减去数组中的每一个, 判断差是否在集合中, 如果存在则返回正确, 不存在则把减去的值放入该集合中, 依次进行判断;
算法3
1 | public boolean twoSum(int[] nums, int tg) { |
解释
先把数组做升序排序(会影响left和right的移动), 然后把收尾进行相加, 如果大于target值, 则把right的位置向前移动, 如果小于target值, 则把left值向后移动