// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误,
  或有其他见解,往不吝赐教,感激不尽,拜谢。
领扣 第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]
初次使用方法
/*
* 看到这道题的第一思路就是创建一个左数组,
* 通过一层循环赋值并求出最大数,
* 再进行一次循环来与右数组的元素依次进行比较
* 完善并测试了下代码后提交发现超出时间限制
* */
 public static int partitionDisjoint(int[] A) {
//创建一个链式集合来充当左数组
LinkedList<Integer> list = new LinkedList();
//创建一个判断标记
boolean flag = true;
//外循环 循环向左数组进行添加元素
for (int a = 0; a < A.length - 1; a++) {
//向集合添加元素
list.add(A[a]);
//排序并获取最大值
Collections.sort(list);
int max = list.getLast();
//重置标记的初值
flag = true;
//被循环 进行判断
for (int b = a + 1; b < A.length; b++) {
//当右数组存在小于max的值时,标记更改
if (max > A[b]) {
flag = false;
}
}
//标记更改 继续循环 未更改 获得长度
if (flag) {
return (a + 1);
}
}
return 0;
}

第一次代码

/*
* 个人总经问题出现在了链式集合上,进行了许多没必要的操作
* 例如 添加 排序 解题的思路除了问题
* 这时感觉应该找寻一下规律
* 发现获得最大值没必要全部左数组进行比较
* 使用之前的最大值与新加入的值进行比较就可以了
* 本着这种思路测试后 58组数据处理时间6ms左右
* */
public static int partitionDisjoint1(int[] A) {
//左数组最大值
int max = A[0];
// 左数组长度
int a;
//创建标记
boolean flag;
//跳出标签
out:
//外循环为左数组长度
for (a = 0; a < A.length - 1; a++) {
//初始化标记
flag = true;
//内循环记性判断比较
for (int b = a + 1; b < A.length; b++) {
//存在小于max的元素时 更改标记 并打断本次循环
if (max > A[b]) {
flag = false;
break;
}
}
//如标记未发生更改,即左右数组已经符合条件 跳出所有循环
if (flag) {
break out;
}
/*
* 未跳出循环 当前新填入的值与之前的最大值进行比较
* 大于则互换,小于则不变
* */ if (max < A[a + 1]) {
max = A[a + 1];
}
}
//返回长度
return a + 1;
}

第二次代码

/*
* 目前最优代码的思路很清晰,考虑的跟周全
* 老实说 感觉他的代码更富有些 美感?
* 不知道是不是 因为他是目前最优的原因
* 虽然他的逻辑我能理解
* 但是总感觉有更深的细节在其中
* 作为一个刚刚踏入算法领域的小白
* 我觉得未来还有很长的路要走
* 还有很多的东西要学
* */
 public static int bestMehtod(int[] A) {
//最小长度左数组的最大值
int max = A[0];
//临时最大值
int nowmax;
//
int j;
//左数组长度
int i;
//确保左右各数组合都有元素
if (A[0] == A[A.length - 1])
return 1;
//goto标签 跳出多重循环
out:
//外循环 首先判断当前的左数组的最大值和将要加入的元素大小关系
for (i = 1; i < A.length; i++) {
//判断下一个元素和之前左数组的最大值的关系
if (max > A[i]) {
//大于 直接跳过本次循环 长度增加
continue;
} else {
//小于 将下一个元素赋值给临时最大值?(为啥设置了这个临时值,优化了这个代码?)
nowmax = A[i];
//内循环
for (j = i; j < A.length; j++) {
//依次判断每个元素是否大于最大值
if (A[j] >= max) {
//大于,再判断右数组长度是否最小了
if (j == (A.length - 1))
//是 因out标签位置跳出所有循环
break out;
//否 跳过本次循环
continue;
} else {
//小于 将临时最大值赋值给max 并跳出此次循环
max = nowmax;
break;
}
} } }
//返回长度
return i;
}

目前答案中最优代码

我们生活在泥沼之中,但是有人依然仰望星空。

We are all in the gutter, but some of us are looking at the stars.

                                                                写于2018.11.16

												

day1——分割数组的更多相关文章

  1. lintcode 容易题:Partition Array by Odd and Even 奇偶分割数组

    题目: 奇偶分割数组 分割一个整数数组,使得奇数在前偶数在后. 样例 给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]. 挑战 在原数组中完成,不使用额外空间. 解题: 一次快速排序就可 ...

  2. LeetCode 548. Split Array with Equal Sum (分割数组使得子数组的和都相同)$

    Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies fol ...

  3. LeetCode——数组篇:659. 分割数组为连续子序列

    659. 分割数组为连续子序列 输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数.返回你是否能做出这样的分割? 示例 1: 输入: [ ...

  4. lintcode373 奇偶分割数组

    奇偶分割数组 分割一个整数数组,使得奇数在前偶数在后. 您在真实的面试中是否遇到过这个题? Yes 样例 给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]. 我的方法:设定两个数组,分别 ...

  5. LintCode-373.奇偶分割数组

    奇偶分割数组 分割一个整数数组,使得奇数在前偶数在后. 样例 给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]. 挑战 在原数组中完成,不使用额外空间. 标签 数组 两根指针 code ...

  6. php用explode,可以提供多个字符作为分割符来进行分割数组吗?

    explode — 使用一个字符串分割另一个字符串, 它的函数原型如下: array explode ( string $delimiter , string $string [, int $limi ...

  7. LeetCode 410——分割数组的最大值

    1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道--最小分割分数. class Solution { public: // 若分割数组的最大值 ...

  8. Leetcode 659.分割数组为连续子序列

    分割数组为连续子序列 输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数.返回你是否能做出这样的分割? 示例 1: 输入: [1,2,3 ...

  9. Leetcode 410.分割数组的最大值

    分割数组的最大值 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意:数组长度 n 满足以下条件: 1 ≤ n ...

随机推荐

  1. 3.2.2 SpringMVC配置式开发

    SpringMVC配置式开发 1. SpringMVC运行原理(执行过程) 2. 需求 用户提交一个请求, 服务端处理器接收到请求后, 给出一条信息,在相应页面中显示该条信息 3. 开发步骤 (1) ...

  2. Go 初体验 - 错误与异常处理

    错误处理是学习任何编程语言都需要考虑的一个重要话题 go 内置的 error 接口是这样的: 先上代码: 输出: 释义: 我们首先定义9行的自定义错误类型 30行再实现 error 接口 34定义打开 ...

  3. Ajax配合vue+element打造个人专属loading

    最近有使用到element组件中的loading,主要是处理后台传输数据太大,页面这边较长时间处于一个白屏,这里使用了一个loading组件,来进行一个优化,当然这只是视觉层面的一个简单优化,如果不用 ...

  4. Machine Learning 第一二周

    # ML week 1 2 一.关于machine learning的名词 学习 从无数数据提供的E:experience中找到一个函数使得得到T:task后能够得到P:prediction 监督学习 ...

  5. flask 电子邮件Flask-Mail

    电子邮件 在web程序中,经常会需要发送电子邮件.比如,在用户注册账户时发送确认邮件:定期向用户发送热门内容或是促销信息等等.在Web程序中发送电子邮件并不复杂,借助扩展Flask-Mail或是第三方 ...

  6. Linux SPI初始化及接口函数代码细究

    2012-01-08 22:11:38 目的:我需要掌握spi驱动相关数据结构关系,及在哪部分函数中把这些数值进行底层寄存器赋值的.结合应用层函数完成spi驱动的代码测试.已达到灵活修改的目的. 按顺 ...

  7. C博客作业06--结构体&文件

    1.本章学习总结 1.1思维导图 1.2本章学习体会 学习了结构和文件,又是懵懵的课了,我的天啊.结构还好,题目集一出就做了,不是很难,感觉掌握的还可以,不过这只是感觉而已,等到真正来写大作业的时候又 ...

  8. SpringBoot+Thymeleaf问题

    springboot在controller返回数据到thymeleaf报404 用springboot做一个例子,访问controller可以返回数据,但是到thymeleaf却报404, 检查发现路 ...

  9. IPv4的编址方法

    重难点: 1.IP地址有3位标识符,由ICANN进行分配. 2.两级的IP地址分为 ::={<网络号>,<主机号>}. 3.在同一个局域网上的主机或路由器的IP地址中的网络号必 ...

  10. unix socket服务器

    只能处理单个消息,一发一收. int loop(void) {   struct sockaddr_un client_addr;  int server_socket, client_socket; ...