1.個人思路 1.情景假設 一天,班主任佈置了一個任務:給所有的小朋友都發了一個牌子,每個牌子上都有一個數字,誰找到兩個牌子合起來的數字等於老師的牌子,那麼可以贏的一個蘋果。 這個時候小朋友,如果你是小朋友。肯定先看自己牌子的數字,然後在看看老師牌子的數字,找數學老師算出需要的數字,然後去看看誰的牌 ...
1.個人思路
- 1.情景假設
一天,班主任佈置了一個任務:給所有的小朋友都發了一個牌子,每個牌子上都有一個數字,
誰找到兩個牌子合起來的數字等於老師的牌子,那麼可以贏的一個蘋果。這個時候小朋友,如果你是小朋友。肯定先看自己牌子的數字,然後在看看老師牌子的數字,
找數學老師算出需要的數字,然後去看看誰的牌子是X號
- 2.過程分析
先看自己牌子的數字 ---> 取一個數字
在看看老師牌子的數字,找數學老師算出需要的數字 ---> 計算查找的值
去看看誰的牌子是X號 ---> 去查找
- 3.優化
小朋友突然所有的小朋友都要去找數學老師算數字
那麼我讓數學老師記下我的數字,如果有其他小朋友符合,讓他來找我不就好了
讓數學老師記下我的數字 ---> 用字典記錄已經找過的值
2.代碼實現
方法一
` // 計算需要查找的值
int findNum = target - nums[0];
for(int i = 0; i < nums.Length; i++)
{
// 選擇的值不需要查找
if(i == 0)
{
continue;
}
// 找到需要的值
if(findNum == nums[i])
{
arr[0] = 0;
arr[1] = i;
}
}`
方法二
` Dictionary<int, int> numDict = new Dictionary<int, int>();
int len = nums.Length;
int[] arr = new int[2];
for (int i = 0; i < len; ++i)
{
// 找到需要的值
if (numDict.ContainsKey(nums[i]))
{
arr[0] = i;
arr[1] = numDict[nums[i]];
break;
}
// 計算需要查找的值
int findNum = target - nums[i];
// 保存計算出來的值
if (!numDict.ContainsKey(findNum))
{
numDict.Add(findNum, i);
}
}`