comments | difficulty | edit_url | tags | ||
---|---|---|---|---|---|
true |
Easy |
|
An array A
is larger than some array B
if for the first index i
where A[i] != B[i]
, A[i] > B[i]
.
For example, consider 0
-indexing:
[1,3,2,4] > [1,2,2,4]
, since at index1
,3 > 2
.[1,4,4,4] < [2,1,1,1]
, since at index0
,1 < 2
.
A subarray is a contiguous subsequence of the array.
Given an integer array nums
of distinct integers, return the largest subarray of nums
of length k
.
Example 1:
Input: nums = [1,4,5,2,3], k = 3 Output: [5,2,3] Explanation: The subarrays of size 3 are: [1,4,5], [4,5,2], and [5,2,3]. Of these, [5,2,3] is the largest.
Example 2:
Input: nums = [1,4,5,2,3], k = 4 Output: [4,5,2,3] Explanation: The subarrays of size 4 are: [1,4,5,2], and [4,5,2,3]. Of these, [4,5,2,3] is the largest.
Example 3:
Input: nums = [1,4,5,2,3], k = 1 Output: [5]
Constraints:
1 <= k <= nums.length <= 105
1 <= nums[i] <= 109
- All the integers of
nums
are unique.
Follow up: What if the integers in
nums
are not distinct?
All integers in the array are distinct, so we can first find the index of the maximum element in the range
The time complexity is
class Solution:
def largestSubarray(self, nums: List[int], k: int) -> List[int]:
i = nums.index(max(nums[: len(nums) - k + 1]))
return nums[i : i + k]
class Solution {
public int[] largestSubarray(int[] nums, int k) {
int j = 0;
for (int i = 1; i < nums.length - k + 1; ++i) {
if (nums[j] < nums[i]) {
j = i;
}
}
return Arrays.copyOfRange(nums, j, j + k);
}
}
class Solution {
public:
vector<int> largestSubarray(vector<int>& nums, int k) {
auto i = max_element(nums.begin(), nums.end() - k + 1);
return {i, i + k};
}
};
func largestSubarray(nums []int, k int) []int {
j := 0
for i := 1; i < len(nums)-k+1; i++ {
if nums[j] < nums[i] {
j = i
}
}
return nums[j : j+k]
}
function largestSubarray(nums: number[], k: number): number[] {
let j = 0;
for (let i = 1; i < nums.length - k + 1; ++i) {
if (nums[j] < nums[i]) {
j = i;
}
}
return nums.slice(j, j + k);
}
impl Solution {
pub fn largest_subarray(nums: Vec<i32>, k: i32) -> Vec<i32> {
let mut j = 0;
for i in 1..=nums.len() - (k as usize) {
if nums[i] > nums[j] {
j = i;
}
}
nums[j..j + (k as usize)].to_vec()
}
}