返回介绍

solution / 1700-1799 / 1708.Largest Subarray Length K / README

发布于 2024-06-17 01:03:15 字数 3592 浏览 0 评论 0 收藏 0

1708. 长度为 K 的最大子数组

English Version

题目描述

在数组 A 和数组 B 中,对于第一个满足 A[i] != B[i] 的索引 i ,当 A[i] > B[i] 时,数组 A 大于数组 B

例如,对于索引从 0 开始的数组:

  • [1,3,2,4] > [1,2,2,4] ,因为在索引 1 上, 3 > 2
  • [1,4,4,4] < [2,1,1,1] ,因为在索引 0 上, 1 < 2

一个数组的子数组是原数组上的一个连续子序列。

给定一个包含不同整数的整数类型数组 nums ,返回 nums 中长度为 k 的最大子数组。

 

示例 1:

输入: nums = [1,4,5,2,3], k = 3
输出: [5,2,3]
解释: 长度为 3 的子数组有: [1,4,5]、 [4,5,2] 和 [5,2,3]。
在这些数组中, [5,2,3] 是最大的。

示例 2:

输入: nums = [1,4,5,2,3], k = 4
输出: [4,5,2,3]
解释: 长度为 4 的子数组有: [1,4,5,2] 和 [4,5,2,3]。
在这些数组中, [4,5,2,3] 是最大的。

示例 3:

输入: nums = [1,4,5,2,3], k = 1
输出: [5]

 

提示:

  • 1 <= k <= nums.length <= 105
  • 1 <= nums[i] <= 109
  • nums 中的所有整数都是不同的。

 

进阶:如果允许 nums 中存在相同元素,你该如何解决该问题?

解法

方法一:模拟

数组中所有整数都不同,我们可以先在 $[0,..n-k]$ 范围内找到最大的元素的下标,然后从该下标开始取 $k$ 个元素即可。

时间复杂度 $O(n)$,其中 $n$ 为数组的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。

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()
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文