1.兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:雜湊表給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
class
solution
;//迭代器it.first會得到key,it.second會得到value。
} hashtable[nums[i]
]= i;
//反過來放入map中,用來獲取結果下標
}return;}
};
複雜度分析兩數之和
小白 python 幾種解法
15. 三數之和(中等)
給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:雙指標參考15. 三數之和:【雜湊法】【雙指標法】詳解給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]
class
solution
// 錯誤去重方法,將會漏掉-1,-1,2 這種情況
/* if (nums[i] == nums[i + 1])
*/// 正確去重方法
if(i >
0&& nums[i]
== nums[i -1]
)int left = i +1;
int right = nums.
size()
-1;while
(right > left)
else
if(nums[i]
+ nums[left]
+ nums[right]
<0)
else);
// 去重邏輯應該放在找到乙個三元組之後 先找到滿足條件的記錄下來,再進行去重
while
(right > left && nums[right]
== nums[right -1]
) right--
;while
(right > left && nums[left]
== nums[left +1]
) left++
;// 找到答案時,雙指標同時收縮
right--
; left++;}
}}return result;}}
;
複雜度分析
時間複雜度:o(n2),其中 n 是陣列nums 的長度。
空間複雜度:o(logn)。我們忽略儲存答案的空間,額外的排序的空間複雜度為o(logn)。然而我們修改了輸入的陣列nums,在實際情況下不一定允許,因此也可以看成使用了乙個額外的陣列儲存了nums 的副本並進行排序,空間複雜度為 o(n)。
15. 三數之和:【雜湊法】【雙指標法】詳解
雜湊表:總結篇!(每逢總結必經典)
三數之和
18.四數之和
給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。
注意:答案中不可以包含重複的四元組。
排序+雙指標
class
solution
for(
int i = k +
1; i < nums.
size()
; i++
)int left = i +1;
int right = nums.
size()
-1;while
(right > left)
else
if(nums[k]
+ nums[i]
+ nums[left]
+ nums[right]
< target)
else);
// 去重邏輯應該放在找到乙個四元組之後
while
(right > left && nums[right]
== nums[right -1]
) right--
;while
(right > left && nums[left]
== nums[left +1]
) left++
;// 找到答案時,雙指標同時收縮
right--
; left++;}
}}}return result;}}
;
官方剪枝操作
class
solution
sort
(nums.
begin()
, nums.
end())
;int length = nums.
size()
;for
(int i =
0; i < length -
3; i++)if
(nums[i]
+ nums[i +1]
+ nums[i +2]
+ nums[i +3]
> target)
if(nums[i]
+ nums[length -3]
+ nums[length -2]
+ nums[length -1]
< target)
for(
int j = i +
1; j < length -
2; j++)if
(nums[i]
+ nums[j]
+ nums[j +1]
+ nums[j +2]
> target)
if(nums[i]
+ nums[j]
+ nums[length -2]
+ nums[length -1]
< target)
int left = j +
1, right = length -1;
while
(left < right));
while
(left < right && nums[left]
== nums[left +1]
) left++
;while
(left < right && nums[right]
== nums[right -1]
) right--;}
else
if(sum < target)
else}}
}return quadruplets;}}
;
四數之和
18. 四數之和:【雙指標法】詳解
springboot之動態切換多資料來源
1.註冊多資料來源 configuration public class datasourceconfiguration 廣州資料來源 bean name guangzhoudatasource qualifier guangzhoudatasource configurationpropertie...
演算法之尋找陣列中的多數元素
給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。首先,我們先按照一般思路想。可以新定義乙個陣列來儲存原始陣列中每個不同元素出現的個數,然後定義兩個變數來儲存當前最大出現的次數和當前的多數元素。pr...
多資料來源報表解析之簡單多源報表
多資料來源報表即一張報表中可以定義多個資料集,分別取出需要的資料庫表,所取的資料庫表甚至可以來自於不同的資料庫。本文通過幾個例子說明多個資料集資料如何相互關聯來實現多源報表。1.描述 多資料來源,就是在同一張報表當中,顯示的資料來自於多個不同的表或不同的庫。如下圖一張簡單的多資料來源報表,左側藍色部...