// 小白一名,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. 20175211 2018-2019-2 《Java程序设计》第六周学习总结

    目录 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学习中的问题和解决过程 代码托管 学习进度条 参考资料 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学 ...

  2. Intellij IDEA 配置Tomcat远程调试

    一.前言 在服务器端开发过程中,由于服务器环境差异导致运行结果不符合预期. 所以就需要到IDEA Debug 服务器代码.看起来貌似很高大上的事情. 今天就说说使用Intellij IDEA 配置的方 ...

  3. The Non-Inverting Amplifier Output Resistance by Adrian S. Nastase [转载]

    Source Address: http://masteringelectronicsdesign.com/the-non-inverting-amplifier-output-resistance/ ...

  4. t-SNE完整笔记

    http://www.datakit.cn/blog/2017/02/05/t_sne_full.html t-SNE(t-distributed stochastic neighbor embedd ...

  5. 使用google earth engine根据NDWI(归一化水指数)提取水体信息

    交流合作请联系: ab000c@163.com

  6. ASP.NET 教程汇总

    channel9 https://channel9.msdn.com/ .net core项目实战 https://study.163.com/course/introduction.htm?cour ...

  7. Web Deploy 发布网站错误 检查授权和委派设置

    Web Deploy发布ASP.NET网站给我们提供方便,配置好后可以很方便地发布网站到IIS服务器. 自安装Web Deploy一年以来,一直都用得好好地. 直到最近,Gitlab-CI自动发布出了 ...

  8. 通过宝塔webhook,实现git自动拉取服务器代码

    1.宝塔安装webhook,添加一条记录,脚本内容为: #!/bin/bash echo "" #输出当前时间 date --date='0 days ago' "+%Y ...

  9. vue配置404页面

    { path:'*', name:"/404", component:cuowu } path星号表示没有这个路由 name表示去这个地址 component这个页面引入的时候叫的 ...

  10. Node.js基础学习二之POST请求

    本篇介绍下 Node.js post 请求 需求: 用户登录,前端界面输入用户名和密码,点击登录请求后台验证,根据后台反馈的信息做出响应 前端: (1)使用form表单 (2)使用ajax异步请求 服 ...