Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
給定一個整型數(shù)組以及一個目標值,求數(shù)組中兩個相加等于目標值的元素的索引。此題假設給定的數(shù)組中一定有兩個元素相加等于目標值。
1、第一種實現(xiàn)方式
使用暴力搜索的方式,用雙層for循環(huán)遍歷數(shù)組,拿數(shù)組的每一個元素與其他元素相加之后與目標值進行對比,找出符合要求的兩個元素。
實現(xiàn)代碼如下:
public int[] twoSum01(int[] nums, int target) {
int[] result = new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
break;
}
}
}
return result;
}
2、第二種實現(xiàn)方式
第一種實現(xiàn)方式在最壞的情況下的時間復雜度為O(n2),執(zhí)行時間較長,不是一種比較好的實現(xiàn)方式,下面是第二種實現(xiàn)方法。
定義一個Map,遍歷數(shù)組,每次都用目標值減去數(shù)組當前值得到差值temp,并判斷temp是否存在于Map中,如不存在,則將數(shù)組當前值和索引存入Map中;如存在,則取出temp對應的索引值。
實現(xiàn)代碼如下:
public int[] twoSum02(int[] nums, int target) {
HashMap tempMap = new HashMap();
int[] resultArr = new int[2];
for(int i = 0; i < nums.length; i++) {
// 用target減去數(shù)組當前值
int temp = target - nums[i];
// 判斷HashMap中是否包含temp
if(tempMap.get(temp) != null) {
resultArr[0] = tempMap.get(temp);
resultArr[1] = i;
break;
} else {
tempMap.put(nums[i], i); // 如不包含,就將當前值存入Map中
}
}
return resultArr;
}
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。