无序和有序数组中和为S的元素
2019-09-29 本文已影响0人
轻菊不爱柠檬
其实最近我又想到一个方法,可以进行先对无序排序再进行,但是排序算法也是需要合适时间复杂度的~ 所以也不是完美的方法
1.数组为无序的情况,存在两种方法
方法一:双重循环,类比输出矩阵的下三角,时间复杂度
代码:

方法二:借助hashMap
把数组中的元素和及下标存入hashmap,遍历hashMap时间复杂度O(n),查找时间复杂度O(1),那么总的时间复杂度O(n).
思路:把数组中的元素和及下标存入hashmap<元素,下标>,遍历该hashMap,对于每一个键值对,subValue=target-entry,寻找subValue是否在hashMap中,存在就为找到

2.数组为有序的情况,使用双指针,左右一起遍历。
数列满足有序,设置头尾两个指针i和j,初始分别指向头和尾
(1)当nums[i]+nums[j]==target,正好满足,返回即可
(2)当nums[i]+nums[j]<target时,说明nums[i]肯定不是那个满足的数,那么就 i++
(3)当nums[i]+nums[j]>target时,说明nums[j]肯定不是那个满足的数,那么就 j++
代码:

注意该函数的返回值是int[],所以最后新声明一个int[]数组,把该数组初始化为nums[i]和nums[j],返回即可。