使用JavaScript解决LeetCode分割数组的问题

简介: 使用JavaScript解决LeetCode分割数组的问题

分割数组


给定一个数组 nums ,将其划分为两个连续子数组 leftright, 使得:

  • left 中的每个元素都小于或等于 right 中的每个元素。
  • leftright 都是非空的。
  • left 的长度要尽可能小。

在完成这样的分组后返回 left 的 长度 。

用例可以保证存在这样的划分方法。

示例 1:

输入: nums = [5,0,3,8,6]

输出: 3

解释: left = [5,0,3],right = [8,6]

示例 2:

输入: nums = [1,1,1,0,6,12]

输出: 4

解释: left = [1,1,1,0],right = [6,12]


解题思路


对于数组left,它的第一个成员就是nums[0],然后我们需要遍历nums数组中的每个数字,当发现遍历的这个数字nums[i]大于nums[0]的时候,则表示这个数字暂时可能不属于数组left。那么当发现遍历的这个数字nums[i]小于或等于nums[0]的时候,则可以判断出这个数字一定是属于数组left的。

根据题目可知left 中的每个元素都小于或等于 right 中的每个元素所以我们需要一个变量leftMax来保存数组left中的最大数字,以及下标index,用于划分数组left和数组right。只要发现遍历的数字小于或等于leftMax时,我们就可以通过移动index来划分出新的数组left。当我们遍历完所有的nums数组中的数字之后,index指向的位置就是数组left的最后一个元素的位置。那么数组left的长度就等于index + 1


image.png


具体步骤如下:

  • 第一步:初始化一个index,用于存储当前索引,max用于与存储最大值,先令第一个元素等于最大值;leftMax用于存储左边数组最大值
  • 第二步:遍历数组,for循环内判断leftMax与当前元素的大小
  • 第三步:如果左边的最大值小于nums后面的每一项,则令max为【max和nums[i]比较】的最大值
  • 第四步:如果leftMax > nums[i]则index存储当前下标,并且令leftMax = max
  • 第五步:返回index+1为左边数组的长度
var partitionDisjoint = function(nums) {
    let index = 0, max = nums[0], leftMax = max;
    for (let i = 0; i < nums.length; i++) {
        if (leftMax > nums[i]) {
            index = i;
            leftMax = max;
        } else {
            max = Math.max(max, nums[i]);
        }
    }
    return index + 1;
};



目录
相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
29天前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
21 2
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
35 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
31 1
|
1月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
23 5
|
1月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
19 4
|
1月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
18 0
Leetcode第三十三题(搜索旋转排序数组)
|
1月前
|
JavaScript 前端开发 索引
探索JavaScript数组:基础
探索JavaScript数组:基础
17 3
|
1月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
34 1