题目:2966. 划分数组并满足最大差限制
思路:升序排序,然后每三个数进行比较,时间复杂度0(nlogn)。
C++版本:
cpp
class Solution {
public:
vector<vector<int>> divideArray(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
vector<vector<int>> v;
for(int i=2;i<nums.size();i+=3){
if(nums[i]-nums[i-2]>k){
return {};
}
v.push_back({nums[i-2],nums[i-1],nums[i]});
}
return v;
}
};
JAVA版本:
java
class Solution {
public int[][] divideArray(int[] nums, int k) {
Arrays.sort(nums);
int[][] v=new int[nums.length/3][];
for(int i=2;i<nums.length;i+=3){
if(nums[i]-nums[i-2]>k){
return new int[][]{};
}
v[i/3]=new int[]{nums[i-2],nums[i-1],nums[i]};
}
return v;
}
}
Go版本:
go
func divideArray(nums []int, k int) [][]int {
slices.Sort(nums)
v:=make([][]int,len(nums)/3)
for i:=2;i<len(nums);i+=3 {
if nums[i]-nums[i-2]>k {
return nil
}
v[i/3]=[]int{nums[i-2],nums[i-1],nums[i]}
}
return v
}