1. 程式人生 > 資訊 >工信部: 24 家企業被納入 Q2 電信業務經營不良名單

工信部: 24 家企業被納入 Q2 電信業務經營不良名單

力扣

package Algorithms;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author : zhang
 * @version : 1.0
 * @date : Create in 2021/7/31
 * @description :
 */
public class ThreeSum {
    public static void main(String[] args) {
        int[] nums = {-1, 0, 1, 2, -1, -4, 5};
        List
<List<Integer>> lists = threeSum(nums); System.out.println(lists); //[[-4, -1, 5], [-1, -1, 2], [-1, 0, 1]] } //1、判斷陣列長度n,如果陣列為null或者長度小於3,染回[] //2、對陣列進行排序 //3、遍歷排序後陣列 //如果num[i]>0:因為已經排序後,所以後面不可能有三個數加和為0,直接返回結果 //對於重複元素,跳過,避免出現重複解 //令左指標L=i+1,右指標R=n-1,當L<R時,執行迴圈
//當num[i]+nums[L]+nums[R]==0,執行迴圈,判斷左界和右界是否和下一位置重複,去除重複解。並同時將L,R移到下一位置,尋找新的解 //若和大於零,說明nums[R]太大,R左移 //若和小於零,說明nums[R]太小,L右移 public static List<List<Integer>> threeSum(int[] nums) { ArrayList<List<Integer>> lists = new ArrayList<>(); //排序 Arrays.sort(nums);
//雙指標 int len = nums.length; for (int i = 0; i < len; i++) { //如果num[i]>0:因為已經排序後,所以後面不可能有三個數加和為0,直接返回結果 if (nums[i] > 0) return lists; //對於重複元素,跳過,避免出現重複解 if (i > 1 && nums[i] == nums[i - 1]) continue; int curr = nums[i]; int L = i + 1, R = len - 1; while (L < R) { int tem = curr + nums[L] + nums[R]; if (tem == 0) { List<Integer> list = new ArrayList<>(); list.add(curr); list.add(nums[L]); list.add(nums[R]); lists.add(list); //當num[i]+nums[L]+nums[R]==0,執行迴圈,判斷左界和右界是否和下一位置重複,去除重複解 while (L < R && nums[L + 1] == nums[L]) ++L; while (L < R && nums[R - 1] == nums[R]) --R; //並同時將L,R移到下一位置,尋找新的解 ++L; --R; } else if (tem < 0) {//若和小於零,說明nums[R]太小,L右移 ++L; } else {//若和大於零,說明nums[R]太大,R左移 --R; } } } return lists; } }