LeetCode 15.三數之和

Young老杨發表於2024-04-17

題解:
三個數的地址不同: i != j; j != z; z != i;
三數之和為零: nums[i] + nums[j] + nums[z} == 0;
注:不包含重複的三元組。

定義一個陣列{-1,0,1,2,-1,-4}
定義一個變數 n ,為陣列長度。
定義一個空列表,內包含多個子類表,列表名 ans
List<List> ans = new ArrayList<List>();

用sort();對陣列進行排序。 //預設升序
first,second,third,target;
雙重for迴圈:
外層迴圈:
列舉a,先判斷 nums[first] == nums[first - 1] //避免出現重複的三元組。
third == n - 1;
target == -nums[first];
內層迴圈:
second == first + 1;
先判斷 nums[second] == nums[second - 1] //避免出現重複的三元組。

雙指標演算法:second 從左端開始檢索,third 從右端開始檢索。
對撞指標:從兩端向中間開始遍歷。

nums[second] + nums[third] > targat 時,因為sort();預設升序,所以third-1。

當 second == third 時;結束內迴圈。

當 nums[second] + nums[third] = targat 時,
建立一個列表List list = new ArrayList();
用add();向列表新增元素。
再將列表list儲存進ans列表中
ans.add(list);

原始碼:

相關文章