整数配列を指定し、2つの数を加算してターゲット値に等しいものを見つけます.
2267 ワード
オリジナル:悦楽書プログラマー小川
整数配列を指定し、2つの数を加算してターゲット値に等しいものを見つけます.
例えば、与えられた配列および目標値nums=[2,7,11,15]、target=9はnums[0]+nums[1]=2+7=9が[0,1]HashMapを利用するため
解法1:
この問題は配列内の任意の2要素の和が与えられた目標整数に等しいことを求め,配列forループが遍歴し,2層forループであることを容易に考え,第1版のコード構想はすでに存在している.
解法2:
上の解法は2層の循環で、循環回数はn*(n-1)回で、nは配列要素の個数で、nが大きいほど、プログラムの実行時間が長くなるので、それは1回だけ循環することができますか?加算マッチングができる以上、減算は?ターゲット整数と配列内の各要素の差を取得してから、この差がこの配列に存在するかどうかを判断します.この場合、新しいデータを格納するセットが必要です.各要素と各要素のインデックスが含まれているので、新しいデータを格納するオブジェクトとしてMapを選択します.
整数配列を指定し、2つの数を加算してターゲット値に等しいものを見つけます.
例えば、与えられた配列および目標値nums=[2,7,11,15]、target=9はnums[0]+nums[1]=2+7=9が[0,1]HashMapを利用するため
解法1:
この問題は配列内の任意の2要素の和が与えられた目標整数に等しいことを求め,配列forループが遍歴し,2層forループであることを容易に考え,第1版のコード構想はすでに存在している.
//java
private int[] findData(int[] array,int target){
int[] result={-1,-1};
HashMap map = new HashMap();
for(int i=0;i
//Kotlin
fun twoSum1(nums: IntArray, target: Int): IntArray? {
var result = IntArray(2)
if (nums.size < 2)
return null
for (i in 0..nums.size-1) {
for (j in i + 1..nums.size-1) {
if (nums[i] + nums[j] == target) {
result[0] = nums[i]
result[1] = nums[j]
}
}
}
return result;
}
解法2:
上の解法は2層の循環で、循環回数はn*(n-1)回で、nは配列要素の個数で、nが大きいほど、プログラムの実行時間が長くなるので、それは1回だけ循環することができますか?加算マッチングができる以上、減算は?ターゲット整数と配列内の各要素の差を取得してから、この差がこの配列に存在するかどうかを判断します.この場合、新しいデータを格納するセットが必要です.各要素と各要素のインデックスが含まれているので、新しいデータを格納するオブジェクトとしてMapを選択します.
//java
public int[] twoSum(int[] nums, int target) {
Map map = new HashMap();
int[] result=new int[2];
for(int i=0;i
//Kotlin
fun twoSum2(nums: IntArray, target: Int): IntArray? {
var result = IntArray(2)
if (nums.size < 2)
return null
var map = HashMap()
for (i in 0..nums.size-1) {
val k = target - nums[i]
if (map.containsKey(k)) {
result[0] = nums[map.get(k)!!]
result[1] = nums[i]
break
}
map.put(nums[i], i)
}
return result
}