1. 程式人生 > >day1——分割陣列

day1——分割陣列

領釦 第915題 今日演算法
題幹
//給定一個數組 A,將其劃分為兩個不相交(沒有公共元素)的連續子陣列 left 和 right, 使得:

//
// left 中的每個元素都小於或等於 right 中的每個元素。
// left 和 right 都是非空的。
// left 要儘可能小。
// 在完成這樣的分組後返回 left 的長度。可以保證存在這樣的劃分方法。
// 示例 1:
//
// 輸入:[5,0,3,8,6]
// 輸出:3
// 解釋:left = [5,0,3],right = [8,6]
// 示例 2:
//
// 輸入:[1,1,1,0,6,12]

// 輸出:4
// 解釋:left = [1,1,1,0],right = [6,12]
初次使用方法
/*
* 看到這道題的第一思路就是建立一個左陣列,
* 通過一層迴圈賦值並求出最大數,
* 再進行一次迴圈來與右陣列的元素依次進行比較
* 完善並測試了下程式碼後提交發現超出時間限制
* */
 1 public static int partitionDisjoint(int[] A) {
 2         //建立一個鏈式集合來充當左陣列
 3         LinkedList<Integer> list = new LinkedList();
4 //建立一個判斷標記 5 boolean flag = true; 6 //外迴圈 迴圈向左陣列進行新增元素 7 for (int a = 0; a < A.length - 1; a++) { 8 //向集合新增元素 9 list.add(A[a]); 10 //排序並獲取最大值 11 Collections.sort(list); 12 int max = list.getLast(); 13 //
重置標記的初值 14 flag = true; 15 //被迴圈 進行判斷 16 for (int b = a + 1; b < A.length; b++) { 17 //當右陣列存在小於max的值時,標記更改 18 if (max > A[b]) { 19 flag = false; 20 } 21 } 22 //標記更改 繼續迴圈 未更改 獲得長度 23 if (flag) { 24 return (a + 1); 25 } 26 } 27 return 0; 28 }
第一次程式碼