小白水平理解面试经典题目_二维数组类LeetCode 2966 Divide Array【排序算法实现】

🏆个人专栏
🤺 leetcode
🧗 Leetcode Prime
🏇 Golang20天教程
🚴‍♂️ Java问题收集园地
🌴 成长感悟
欢迎大家观看,不执着于追求顶峰,只享受探索过程

2966 将数组划分为具有最大差值的数组

小白渣翻译:

给定一个大小为 n 的整数数组 nums 和一个正整数 k 。
将数组分成一个或多个大小为 3 的数组,满足以下条件:

  • nums 的每个元素都应该位于一个数组中。
  • 一个数组中任意两个元素之间的差异小于或等于 k 。

返回包含所有数组的二维数组。如果无法满足条件,则返回空数组。如果有多个答案,则返回其中任何一个。

例子

在这里插入图片描述
在这里插入图片描述

这里是小白理解

在这里插入图片描述
这时候坐在自习室的白月光居然也在看这道题,突然跑来问小白,这题是什么意思啊?

小白:这题目描述很诡异,而且他题目描述居然还多了两个限制,而且还是一个多维,那肯定得用到Arraylist来存储了,但是乍一看,确实不太懂他的意思。

这里我用大家能明白的在描述再描述一下:

就是不管数组nums有多长,但是要满足分配后的每一个小数组的大小是3。另外注意,这个小数组里边的差值 <= k的值。

当然了,作为绅士的小白,肯定是上图让白月光更好理解一下。
在这里插入图片描述

咱们先给上边的数组排个序
在这里插入图片描述
为了继续更好理解,在进行一个分割
在这里插入图片描述
在这里插入图片描述
黑长直OS:小伙子,可以啊,这不仅逻辑感人,美术功底也可以啊,有机会咱们去看看画展吧

真正面试环节

面试官:你可以解答这道”分割数组“的题目吗,看看小伙子你的二维数组处理能力。

小白:嘿嘿,这不巧了么这不是
在这里插入图片描述

public int[][] divideArray(int[] nums, int k) {
        Arrays.sort(nums);
        int[][] ans = new int[nums.length / 3][3];
        for (int i = 0; i < nums.length; i += 3) {
            if (nums[i + 2] - nums[i] > k) {
                return new int[0][0];
            }
            ans[i / 3] = new int[]{nums[i], nums[i + 1], nums[i + 2]};
        }
        return ans;
    }

好了,时间复杂度O(nlogN)了,下一面继续

在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】
编码道路漫漫,只要先看脚下的路,徐徐前进即可。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值