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     }
第一次代码

猜你喜欢

转载自www.cnblogs.com/zqmjava/p/9969762.html