1. 程式人生 > 資訊 >乂度 MU-601 音訊解碼器/MU-603 解碼膽前級發售:598 元起

乂度 MU-601 音訊解碼器/MU-603 解碼膽前級發售:598 元起

題庫來自https://leetcode-cn.com/problemset/algorithms/

給定一個整數陣列 nums和一個整數目標值 target,請你在該陣列中找出 和為目標值 target 的那兩個整數,並返回它們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素在答案裡不能重複出現。
你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; /** * @author zj * */ public class Solution { public static void main(String[] args) { int[] nums = {2,7,11,15};// 給定的資料 int target = 9;//目標值 int[] result = twoSum(nums, target); System.out.println(Arrays.toString(result)); int[] result1 = twoSum1(nums, target); System.out.println(Arrays.toString(result1)); }
/** * 解題思路: * 由於要找的是兩個元素之和為給定目標值,那麼就要先取出第一個元素, * 然後將這個元素和資料中的其他元素進行加法運算,得到的結果和目標值進行判斷相等 * 如果兩個元素之和等於目標值,那麼這兩個元素的下標就是想要的結果 * 其中要先取出第一個元素,那麼就使用for,然後根據下標取值 * 取第二個元素,第二個元素為資料中不是第一個元素的其他元素,這就需要使用for取值, * 注意規則:第二個元素必定在第一個元素之後,那麼就可以使用j=i+1 * @param nums * @param
target * @return */ private static int[] twoSum(int[] nums, int target) { // 收集符合結果的結果集,收集的為資料的下標 int[] result = new int[2]; // 記錄第一個元素資料,int有預設值0 int temp = 0; // 先取出第一個元素 for (int i = 0; i < nums.length; i++) { // 取出的第一個元素資料 temp = nums[i]; // 取出第二個元素,第二個元素在第一個元素之後 for (int j = i+1; j < nums.length; j++) { // 第一個元素和第二個元素之和計算,並和目標值相等判斷 if(target == (nums[j] + temp)) { //符合相等判斷,將結果進行儲存result中 result[0] = i; result[1] = j; // 返回出符合的結果,若是資料中沒有符合的資料,那麼陣列中為空值 return result; } } } // 資料中沒有符合條件的資料 return null; } /** * 解題思路: * 由於要找的是兩個元素之和為給定目標值,那麼先將資料中的資料儲存在Map集合中 * Map集合中的key為資料的元素,值為元素所在的索引 * 在儲存Map的過程中是for遍歷所有資料然後進行儲存, * 而判斷兩個元素之和與給定目標值相等也是for遍歷, * 那麼有這個思路: * 在向Map集合中儲存時, * Map中的key(元素)和即將儲存的元素之和與給定目標值相等 * 那麼就可以判斷這兩個元素符合,將這兩個元素的下標返回即可 * 在儲存時,先進行判斷然後不符合結果再儲存到Map中, * 也就是說從資料中取出一個元素,然後將這個元素和Map中元素進行相加進行判斷 * 若是不符合,就將這個元素儲存到Map中。 * 若是儲存在判斷,那麼就會產生影響: * 從資料中取出第二個元素,若是將此元素儲存到Map中, * 然後再用這個元素和Map中的元素相加與給定目標值相等判斷, * 就會產生本身和本身相加與給定目標值相等判斷的情況 * @param nums * @param target * @return */ public static int[] twoSum1(int[] nums, int target) { // 將資料中元素儲存在Map中,key為資料中的元素,value為元素所在資料中的下標 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // 遍歷,Map進行收集資料中所有元素 for (int i = 0; i < nums.length; ++i) { // 判斷Map收集的元素符合結果, // 即第一個元素(已經儲存到Map中)與第二個元素(即將儲存到Map中)之和等於目標值 // 在儲存第一個值時,由於Map中沒有資料({}),所以這個if不會執行 if (map.containsKey(target - nums[i])) { // 返回第一個元素(已經儲存到Map中)的下標 // 和第二個元素(從資料中取出的元素,若是不符合,則儲存到Map中)的下標 return new int[]{map.get(target - nums[i]), i}; } // 將不符合的資料儲存到Map中 map.put(nums[i], i); } return new int[0]; } }