



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-456bd5deb85c7ecd.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_models_browser_cache","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_embedded_header_button","copilot_immersive_file_preview_keep_mounted","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_optimistic_linked_branch_create","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_client_env_github_domain","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_commit_checks_dialog","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_compute_proxy_control","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-d0e712808f201ef1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-74e9766bd696d26a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-ecf766ea8a2c7fd6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-8e3d9c5d57d50312.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-cd1b421ad0ad7ed5.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-61cbdbc14ca92159.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.b6099d51b9e67b57.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-1adb1d8c74044da9.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-1a7659d5cb4f8269.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-f3f5d71440009c48.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fbb00aaa3ab9abdf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04n-51c49ba758739f13.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1v-da5b33b877bfa358.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-acc18f300bdd5b9f.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.5858534b1c27f133.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-f832f583b1c927a9.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-12ebdc24dcff1ecc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eag-d9eea130fa716df9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y2-87df441f1bc5a264.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kcz-607e36c8a3751cf0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x4-65dba777efd828f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-1a09248f686325f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-95be29ba1ef725d9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-c4edb8ab48c5846d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-915c6643cc0d7d44.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-69d9b60a1b1fcd59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-8ea7978d3fcd114e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-a401e69a37d95bcc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-1c18210f6b9e2263.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-0a2e46387735f1f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-cb1e4ddbce4f007b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ko6-9e80f7ac359e3c43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uw-8c275f7ac25b7cf6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w5-13e3a7548bb20af9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fm-c00a7677663ba326.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-45022d3da7b8817e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h0-010921512138e12f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5p-ae5db0820116fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8vq-b2af216e992e11ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g5-88f2a4514daa19ca.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/arw-51e8918a1b75a80f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-c72427a42c7b1dd6.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.de7a55ca73db5693.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/z.812a998e1961b84d.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.5099f1f900111d1b.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fb-ef2c91536abed646.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-6f8f2a4b24a472b0.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.3ae223c973c2cef3.module.css" />


  <title>leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:624f87a4-12ae-0bcf-fc2e-58af04494a92">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="A126:1F816C:12423EAF:1114ABB8:6AACB160" data-pjax-transient="true"/><meta name="html-safe-nonce" content="573890066922adf7a454279e92c7d32145933a44d67127e9de569858bbeebf41" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBMTI2OjFGODE2QzoxMjQyM0VBRjoxMTE0QUJCODo2QUFDQjE2MCIsInZpc2l0b3JfaWQiOiIyNDMzNjU2NDU3NDMzNzU2MDAwIiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="62b716ee35974952690f91f01e577f5f33c0c30ffc97fe87b2b58784f56922ef" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:793905675" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master" /><meta name="twitter:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  <meta property="og:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta property="og:image:alt" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master" /><meta property="og:url" content="https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md" /><meta property="og:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="1b7a4ff13706175db9ddcddd8b7c27b8946d9e20d9cdccd9cb54b37d67bc242f" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="ec4c7b86d7b57240253150b827ea48b04e08d8760dc6553d2a04f62000f3fe0c" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="4644d0c4c253864cb5744c15cc28e64149f3c1e0e485c44cbd24a4b86ca508ad" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/feinan/leetcode-master git https://github.com/feinan/leetcode-master.git">

  <meta name="octolytics-dimension-user_id" content="1912535" /><meta name="octolytics-dimension-user_login" content="feinan" /><meta name="octolytics-dimension-repository_id" content="793905675" /><meta name="octolytics-dimension-repository_nwo" content="feinan/leetcode-master" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="true" /><meta name="octolytics-dimension-repository_parent_id" content="228016443" /><meta name="octolytics-dimension-repository_parent_nwo" content="youngyangyang04/leetcode-master" /><meta name="octolytics-dimension-repository_network_root_id" content="228016443" /><meta name="octolytics-dimension-repository_network_root_nwo" content="youngyangyang04/leetcode-master" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="4a04228f6072ee1ec5cd2227074bd1c1a8308ce2" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-98a85b4ad3bf8229.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.9f1b311c6a3e620b.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-8671acba87bc0dcb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-f2ae65b837c90ae7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-82c347d20a13fb90.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-c22d880230690e1f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-5251d405164cfa54.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.e3d02f110161be52.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0239.%25E6%25BB%2591%25E5%258A%25A8%25E7%25AA%2597%25E5%258F%25A3%25E6%259C%2580%25E5%25A4%25A7%25E5%2580%25BC.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=feinan%2Fleetcode-master","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md\",\"user_id\":null}}","auth_hydro_click_hmac":"74ceebe7e6e75b9ac55a47e29f8bf3f730e2c795cf6f0657228bd89ade581746","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0239.%25E6%25BB%2591%25E5%258A%25A8%25E7%25AA%2597%25E5%258F%25A3%25E6%259C%2580%25E5%25A4%25A7%25E5%2580%25BC.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="74ceebe7e6e75b9ac55a47e29f8bf3f730e2c795cf6f0657228bd89ade581746"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0239.%25E6%25BB%2591%25E5%258A%25A8%25E7%25AA%2597%25E5%258F%25A3%25E6%259C%2580%25E5%25A4%25A7%25E5%2580%25BC.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="74ceebe7e6e75b9ac55a47e29f8bf3f730e2c795cf6f0657228bd89ade581746"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=feinan%2Fleetcode-master" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="74ceebe7e6e75b9ac55a47e29f8bf3f730e2c795cf6f0657228bd89ade581746"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-d454d32a-70da-47a4-b4ca-30826bf1f68b" aria-labelledby="tooltip-5823c2da-c692-4af5-8bf2-94e30b389c53" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-5823c2da-c692-4af5-8bf2-94e30b389c53" for="icon-button-d454d32a-70da-47a4-b4ca-30826bf1f68b" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked color-fg-muted mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/feinan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/feinan">
        feinan
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/feinan/leetcode-master">leetcode-master</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>
    <span class="text-small lh-condensed-ultra no-wrap mt-1" data-repository-hovercards-enabled>
      forked from <a data-hovercard-type="repository" data-hovercard-url="/youngyangyang04/leetcode-master/hovercard" class="Link--inTextBlock" href="/youngyangyang04/leetcode-master">youngyangyang04/leetcode-master</a>
    </span>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="32a9ed6fed6556c40d95892df79f58437879af20ecbf244d1d63bbddbd5c0202" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-d0d3e01f-ea68-47ac-8317-2e3c46745ee7" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="eb3b0f0cba036adbdd58a753543bea3797512a8f85922f5528b680179b54be06" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="4" data-view-component="true" class="Counter">4</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="04cc716d5b38024f4e96f83d92215c37dbcf078abfb3e293d7db467a70543213" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/feinan/leetcode-master" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /feinan/leetcode-master" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/feinan/leetcode-master/pulls" data-tab-item="i1pull-requests-tab" data-selected-links="repo_pulls checks /feinan/leetcode-master/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/feinan/leetcode-master/actions" data-tab-item="i2actions-tab" data-selected-links="repo_actions /feinan/leetcode-master/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/feinan/leetcode-master/projects" data-tab-item="i3projects-tab" data-selected-links="repo_projects new_repo_project repo_project /feinan/leetcode-master/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-command-id="repositories:go-to-projects" data-react-nav="repo" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/feinan/leetcode-master/security" data-tab-item="i4security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /feinan/leetcode-master/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/feinan/leetcode-master/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /feinan/leetcode-master/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-button" popovertarget="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-overlay" aria-controls="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-list" aria-haspopup="true" aria-labelledby="tooltip-6a015c43-06b5-4097-bc68-ea91c68d9f64" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-6a015c43-06b5-4097-bc68-ea91c68d9f64" for="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-overlay" anchor="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-button" id="action-menu-1882c334-b6dd-4aa7-8b9b-e9ac39eac504-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-7ac8da72-c83b-4a25-81a8-f14d2aa2f63b" href="/feinan/leetcode-master" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-7f3a98b8-fa1a-4b8a-be3d-d079fbd11b7a" href="/feinan/leetcode-master/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-38ed5ec2-a3ff-4a0c-9c69-85e0029e1e73" href="/feinan/leetcode-master/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-2f84b10c-0f66-463d-98ec-60b6481afaf7" href="/feinan/leetcode-master/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-d513c1c7-8e8d-4875-8799-9932e7933431" href="/feinan/leetcode-master/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-52772f10-4f2c-4c7d-8aa0-eb57f36a679f" href="/feinan/leetcode-master/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"239. 滑动窗口最大值","anchor":"239-滑动窗口最大值","htmlText":"239. 滑动窗口最大值"},{"level":2,"text":"算法公开课","anchor":"算法公开课","htmlText":"算法公开课"},{"level":2,"text":"思路","anchor":"思路","htmlText":"思路"},{"level":2,"text":"扩展","anchor":"扩展","htmlText":"扩展"},{"level":2,"text":"其他语言版本","anchor":"其他语言版本","htmlText":"其他语言版本"},{"level":3,"text":"Java：","anchor":"java","htmlText":"Java："},{"level":3,"text":"Python：","anchor":"python","htmlText":"Python："},{"level":3,"text":"Go：","anchor":"go","htmlText":"Go："},{"level":3,"text":"Javascript:","anchor":"javascript","htmlText":"Javascript:"},{"level":3,"text":"TypeScript：","anchor":"typescript","htmlText":"TypeScript："},{"level":3,"text":"Swift:","anchor":"swift","htmlText":"Swift:"},{"level":3,"text":"Scala:","anchor":"scala","htmlText":"Scala:"},{"level":3,"text":"PHP:","anchor":"php","htmlText":"PHP:"},{"level":3,"text":"C#:","anchor":"c","htmlText":"C#:"},{"level":3,"text":"Rust:","anchor":"rust","htmlText":"Rust:"},{"level":3,"text":"C++","anchor":"c-1","htmlText":"C++"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/训练营.png\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"/feinan/leetcode-master/blob/master/problems/qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e要用啥数据结构呢？\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e239. 滑动窗口最大值\u003c/h1\u003e\u003ca id=\"user-content-239-滑动窗口最大值\" class=\"anchor\" aria-label=\"Permalink: 239. 滑动窗口最大值\" href=\"#239-滑动窗口最大值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://leetcode.cn/problems/sliding-window-maximum/\" rel=\"nofollow\"\u003e力扣题目链接\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e给定一个数组 nums，有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e返回滑动窗口中的最大值。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e进阶：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e你能在线性时间复杂度内解决此题吗？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/fa566fc91e5bf7ab314aafd229be11d3357d31a4d0860bb626c84232693ade6a/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f706963732f3233392ee6bb91e58aa8e7aa97e58fa3e69c80e5a4a7e580bc2e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/fa566fc91e5bf7ab314aafd229be11d3357d31a4d0860bb626c84232693ade6a/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f706963732f3233392ee6bb91e58aa8e7aa97e58fa3e69c80e5a4a7e580bc2e706e67\" width=\"600\" data-canonical-src=\"https://code-thinking.cdn.bcebos.com/pics/239.滑动窗口最大值.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003c/p\u003e\n\u003cp dir=\"auto\"\u003e提示：\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e1 \u0026lt;= nums.length \u0026lt;= 10^5\u003c/li\u003e\n\u003cli\u003e-10^4 \u0026lt;= nums[i] \u0026lt;= 10^4\u003c/li\u003e\n\u003cli\u003e1 \u0026lt;= k \u0026lt;= nums.length\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e算法公开课\u003c/h2\u003e\u003ca id=\"user-content-算法公开课\" class=\"anchor\" aria-label=\"Permalink: 算法公开课\" href=\"#算法公开课\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"https://programmercarl.com/other/gongkaike.html\" rel=\"nofollow\"\u003e《代码随想录》算法视频公开课\u003c/a\u003e：\u003ca href=\"https://www.bilibili.com/video/BV1XS4y1p7qj\" rel=\"nofollow\"\u003e单调队列正式登场！| LeetCode：239. 滑动窗口最大值\u003c/a\u003e，相信结合视频再看本篇题解，更有助于大家对本题的理解\u003c/strong\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e思路\u003c/h2\u003e\u003ca id=\"user-content-思路\" class=\"anchor\" aria-label=\"Permalink: 思路\" href=\"#思路\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这是使用单调队列的经典题目。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e难点是如何求一个区间里的最大值呢？ （这好像是废话），暴力一下不就得了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e暴力方法，遍历一遍的过程中每次从窗口中再找到最大的数值，这样很明显是O(n × k)的算法。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e有的同学可能会想用一个大顶堆（优先级队列）来存放这个窗口里的k个数字，这样就可以知道最大的最大值是多少了， \u003cstrong\u003e但是问题是这个窗口是移动的，而大顶堆每次只能弹出最大值，我们无法移除其他数值，这样就造成大顶堆维护的不是滑动窗口里面的数值了。所以不能用大顶堆。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e此时我们需要一个队列，这个队列呢，放进去窗口里的元素，然后随着窗口的移动，队列也一进一出，每次移动之后，队列告诉我们里面的最大值是什么。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这个队列应该长这个样子：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class MyQueue {\npublic:\n    void pop(int value) {\n    }\n    void push(int value) {\n    }\n    int front() {\n        return que.front();\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n    }\n    \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n    }\n    \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e() {\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e();\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e每次窗口移动的时候，调用que.pop(滑动窗口中移除元素的数值)，que.push(滑动窗口添加元素的数值)，然后que.front()就返回我们要的最大值。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这么个队列香不香，要是有现成的这种数据结构是不是更香了！\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e其实在C++中，可以使用 multiset 来模拟这个过程，文末提供这个解法仅针对C++，以下讲解我们还是靠自己来实现这个单调队列。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e然后再分析一下，队列里的元素一定是要排序的，而且要最大值放在出队口，要不然怎么知道最大值呢。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但如果把窗口里的元素都放进队列里，窗口移动的时候，队列需要弹出元素。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么问题来了，已经排序之后的队列 怎么能把窗口要移除的元素（这个元素可不一定是最大值）弹出呢。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e大家此时应该陷入深思.....\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e其实队列没有必要维护窗口里的所有元素，只需要维护有可能成为窗口里最大值的元素就可以了，同时保证队列里的元素数值是由大到小的。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么这个维护元素单调递减的队列就叫做\u003cstrong\u003e单调队列，即单调递减或单调递增的队列。C++中没有直接支持单调队列，需要我们自己来实现一个单调队列\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e不要以为实现的单调队列就是 对窗口里面的数进行排序，如果排序的话，那和优先级队列又有什么区别了呢。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e来看一下单调队列如何维护队列里的元素。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e动画如下：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/9497382a9f9fb6c01b480d238b15ff252664fdbc48f0d67ba9e41fcb297d9b81/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432e676966\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9497382a9f9fb6c01b480d238b15ff252664fdbc48f0d67ba9e41fcb297d9b81/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432e676966\" alt=\"239.滑动窗口最大值\" data-animated-image=\"\" data-canonical-src=\"https://code-thinking.cdn.bcebos.com/gifs/239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e对于窗口里的元素{2, 3, 5, 1 ,4}，单调队列里只维护{5, 4} 就够了，保持单调队列里单调递减，此时队列出口元素就是窗口里最大元素。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e此时大家应该怀疑单调队列里维护着{5, 4} 怎么配合窗口进行滑动呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e设计单调队列的时候，pop，和push操作要保持如下规则：\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003epop(value)：如果窗口移除的元素value等于单调队列的出口元素，那么队列弹出元素，否则不用任何操作\u003c/li\u003e\n\u003cli\u003epush(value)：如果push的元素value大于入口元素的数值，那么就将队列入口的元素弹出，直到push元素的数值小于等于队列入口元素的数值为止\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e保持如上规则，每次窗口移动的时候，只要问que.front()就可以返回当前窗口的最大值。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e为了更直观的感受到单调队列的工作过程，以题目示例为例，输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3，动画如下：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/3dce979617cefcc8959e91cab5ae9a12c33e2e89db3dba40d7d15583fd6d1f15/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432d322e676966\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/3dce979617cefcc8959e91cab5ae9a12c33e2e89db3dba40d7d15583fd6d1f15/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432d322e676966\" alt=\"239.滑动窗口最大值-2\" data-animated-image=\"\" data-canonical-src=\"https://code-thinking.cdn.bcebos.com/gifs/239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC-2.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么我们用什么数据结构来实现这个单调队列呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e使用deque最为合适，在文章\u003ca href=\"https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html\" rel=\"nofollow\"\u003e栈与队列：来看看栈和队列不为人知的一面\u003c/a\u003e中，我们就提到了常用的queue在没有指定容器的情况下，deque就是默认底层容器。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e基于刚刚说过的单调队列pop和push的规则，代码不难实现，如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class MyQueue { //单调队列（从大到小）\npublic:\n    deque\u0026lt;int\u0026gt; que; // 使用deque来实现单调队列\n    // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\n    // 同时pop之前判断队列当前是否为空。\n    void pop(int value) {\n        if (!que.empty() \u0026amp;\u0026amp; value == que.front()) {\n            que.pop_front();\n        }\n    }\n    // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\n    // 这样就保持了队列里的数值是单调从大到小的了。\n    void push(int value) {\n        while (!que.empty() \u0026amp;\u0026amp; value \u0026gt; que.back()) {\n            que.pop_back();\n        }\n        que.push_back(value);\n\n    }\n    // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\n    int front() {\n        return que.front();\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e单调队列（从大到小）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    deque\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; que; \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 使用deque来实现单调队列\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 同时pop之前判断队列当前是否为空。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (!que.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e() \u0026amp;\u0026amp; value == que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()) {\n            que.\u003cspan class=\"pl-c1\"\u003epop_front\u003c/span\u003e();\n        }\n    }\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 这样就保持了队列里的数值是单调从大到小的了。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!que.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e() \u0026amp;\u0026amp; value \u0026gt; que.\u003cspan class=\"pl-c1\"\u003eback\u003c/span\u003e()) {\n            que.\u003cspan class=\"pl-c1\"\u003epop_back\u003c/span\u003e();\n        }\n        que.\u003cspan class=\"pl-c1\"\u003epush_back\u003c/span\u003e(value);\n\n    }\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e() {\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e();\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这样我们就用deque实现了一个单调队列，接下来解决滑动窗口最大值的问题就很简单了，直接看代码吧。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eC++代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\nprivate:\n    class MyQueue { //单调队列（从大到小）\n    public:\n        deque\u0026lt;int\u0026gt; que; // 使用deque来实现单调队列\n        // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\n        // 同时pop之前判断队列当前是否为空。\n        void pop(int value) {\n            if (!que.empty() \u0026amp;\u0026amp; value == que.front()) {\n                que.pop_front();\n            }\n        }\n        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\n        // 这样就保持了队列里的数值是单调从大到小的了。\n        void push(int value) {\n            while (!que.empty() \u0026amp;\u0026amp; value \u0026gt; que.back()) {\n                que.pop_back();\n            }\n            que.push_back(value);\n\n        }\n        // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\n        int front() {\n            return que.front();\n        }\n    };\npublic:\n    vector\u0026lt;int\u0026gt; maxSlidingWindow(vector\u0026lt;int\u0026gt;\u0026amp; nums, int k) {\n        MyQueue que;\n        vector\u0026lt;int\u0026gt; result;\n        for (int i = 0; i \u0026lt; k; i++) { // 先将前k的元素放进队列\n            que.push(nums[i]);\n        }\n        result.push_back(que.front()); // result 记录前k的元素的最大值\n        for (int i = k; i \u0026lt; nums.size(); i++) {\n            que.pop(nums[i - k]); // 滑动窗口移除最前面元素\n            que.push(nums[i]); // 滑动窗口前加入最后面的元素\n            result.push_back(que.front()); // 记录对应的最大值\n        }\n        return result;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003eprivate:\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e单调队列（从大到小）\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n        deque\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; que; \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 使用deque来实现单调队列\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 同时pop之前判断队列当前是否为空。\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (!que.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e() \u0026amp;\u0026amp; value == que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()) {\n                que.\u003cspan class=\"pl-c1\"\u003epop_front\u003c/span\u003e();\n            }\n        }\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 这样就保持了队列里的数值是单调从大到小的了。\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e value) {\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!que.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e() \u0026amp;\u0026amp; value \u0026gt; que.\u003cspan class=\"pl-c1\"\u003eback\u003c/span\u003e()) {\n                que.\u003cspan class=\"pl-c1\"\u003epop_back\u003c/span\u003e();\n            }\n            que.\u003cspan class=\"pl-c1\"\u003epush_back\u003c/span\u003e(value);\n\n        }\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e() {\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e();\n        }\n    };\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;\u0026amp; nums, \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e k) {\n        MyQueue que;\n        vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; result;\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; i \u0026lt; k; i++) { \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 先将前k的元素放进队列\u003c/span\u003e\n            que.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(nums[i]);\n        }\n        result.\u003cspan class=\"pl-c1\"\u003epush_back\u003c/span\u003e(que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e result 记录前k的元素的最大值\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = k; i \u0026lt; nums.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(); i++) {\n            que.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e(nums[i - k]); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 滑动窗口移除最前面元素\u003c/span\u003e\n            que.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(nums[i]); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 滑动窗口前加入最后面的元素\u003c/span\u003e\n            result.\u003cspan class=\"pl-c1\"\u003epush_back\u003c/span\u003e(que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 记录对应的最大值\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e result;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e时间复杂度: O(n)\u003c/li\u003e\n\u003cli\u003e空间复杂度: O(k)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e再来看一下时间复杂度，使用单调队列的时间复杂度是 O(n)。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e有的同学可能想了，在队列中 push元素的过程中，还有pop操作呢，感觉不是纯粹的O(n)。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e其实，大家可以自己观察一下单调队列的实现，nums 中的每个元素最多也就被 push_back 和 pop_back 各一次，没有任何多余操作，所以整体的复杂度还是 O(n)。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e空间复杂度因为我们定义一个辅助队列，所以是O(k)。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e扩展\u003c/h2\u003e\u003ca id=\"user-content-扩展\" class=\"anchor\" aria-label=\"Permalink: 扩展\" href=\"#扩展\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e大家貌似对单调队列 都有一些疑惑，首先要明确的是，题解中单调队列里的pop和push接口，仅适用于本题哈。单调队列不是一成不变的，而是不同场景不同写法，总之要保证队列里单调递减或递增的原则，所以叫做单调队列。 不要以为本题中的单调队列实现就是固定的写法哈。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e大家貌似对deque也有一些疑惑，C++中deque是stack和queue默认的底层实现容器（这个我们之前已经讲过啦），deque是可以两边扩展的，而且deque里元素并不是严格的连续分布的。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e其他语言版本\u003c/h2\u003e\u003ca id=\"user-content-其他语言版本\" class=\"anchor\" aria-label=\"Permalink: 其他语言版本\" href=\"#其他语言版本\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJava：\u003c/h3\u003e\u003ca id=\"user-content-java\" class=\"anchor\" aria-label=\"Permalink: Java：\" href=\"#java\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//解法一\n//自定义数组\nclass MyQueue {\n    Deque\u0026lt;Integer\u0026gt; deque = new LinkedList\u0026lt;\u0026gt;();\n    //弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出\n    //同时判断队列当前是否为空\n    void poll(int val) {\n        if (!deque.isEmpty() \u0026amp;\u0026amp; val == deque.peek()) {\n            deque.poll();\n        }\n    }\n    //添加元素时，如果要添加的元素大于入口处的元素，就将入口元素弹出\n    //保证队列元素单调递减\n    //比如此时队列元素3,1，2将要入队，比1大，所以1弹出，此时队列：3,2\n    void add(int val) {\n        while (!deque.isEmpty() \u0026amp;\u0026amp; val \u0026gt; deque.getLast()) {\n            deque.removeLast();\n        }\n        deque.add(val);\n    }\n    //队列队顶元素始终为最大值\n    int peek() {\n        return deque.peek();\n    }\n}\n\nclass Solution {\n    public int[] maxSlidingWindow(int[] nums, int k) {\n        if (nums.length == 1) {\n            return nums;\n        }\n        int len = nums.length - k + 1;\n        //存放结果元素的数组\n        int[] res = new int[len];\n        int num = 0;\n        //自定义队列\n        MyQueue myQueue = new MyQueue();\n        //先将前k的元素放入队列\n        for (int i = 0; i \u0026lt; k; i++) {\n            myQueue.add(nums[i]);\n        }\n        res[num++] = myQueue.peek();\n        for (int i = k; i \u0026lt; nums.length; i++) {\n            //滑动窗口移除最前面的元素，移除是判断该元素是否放入队列\n            myQueue.poll(nums[i - k]);\n            //滑动窗口加入最后面的元素\n            myQueue.add(nums[i]);\n            //记录对应的最大值\n            res[num++] = myQueue.peek();\n        }\n        return res;\n    }\n}\n\n//解法二\n//利用双端队列手动实现单调队列\n/**\n * 用一个单调队列来存储对应的下标，每当窗口滑动的时候，直接取队列的头部指针对应的值放入结果集即可\n * 单调队列类似 （tail --\u0026gt;） 3 --\u0026gt; 2 --\u0026gt; 1 --\u0026gt; 0 (--\u0026gt; head) (右边为头结点，元素存的是下标)\n */\nclass Solution {\n    public int[] maxSlidingWindow(int[] nums, int k) {\n        ArrayDeque\u0026lt;Integer\u0026gt; deque = new ArrayDeque\u0026lt;\u0026gt;();\n        int n = nums.length;\n        int[] res = new int[n - k + 1];\n        int idx = 0;\n        for(int i = 0; i \u0026lt; n; i++) {\n            // 根据题意，i为nums下标，是要在[i - k + 1, i] 中选到最大值，只需要保证两点\n            // 1.队列头结点需要在[i - k + 1, i]范围内，不符合则要弹出\n            while(!deque.isEmpty() \u0026amp;\u0026amp; deque.peek() \u0026lt; i - k + 1){\n                deque.poll();\n            }\n            // 2.既然是单调，就要保证每次放进去的数字要比末尾的都大，否则也弹出\n            while(!deque.isEmpty() \u0026amp;\u0026amp; nums[deque.peekLast()] \u0026lt; nums[i]) {\n                deque.pollLast();\n            }\n\n            deque.offer(i);\n\n            // 因为单调，当i增长到符合第一个k范围的时候，每滑动一步都将队列头节点放入结果就行了\n            if(i \u0026gt;= k - 1){\n                res[idx++] = nums[deque.peek()];\n            }\n        }\n        return res;\n    }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//解法一\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//自定义数组\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e {\n    \u003cspan class=\"pl-smi\"\u003eDeque\u003c/span\u003e\u0026lt;\u003cspan class=\"pl-smi\"\u003eInteger\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eLinkedList\u003c/span\u003e\u0026lt;\u0026gt;();\n    \u003cspan class=\"pl-c\"\u003e//弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//同时判断队列当前是否为空\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (!\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e == \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e()) {\n            \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e();\n        }\n    }\n    \u003cspan class=\"pl-c\"\u003e//添加元素时，如果要添加的元素大于入口处的元素，就将入口元素弹出\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//保证队列元素单调递减\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//比如此时队列元素3,1，2将要入队，比1大，所以1弹出，此时队列：3,2\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eadd\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetLast\u003c/span\u003e()) {\n            \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eremoveLast\u003c/span\u003e();\n        }\n        \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eadd\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e);\n    }\n    \u003cspan class=\"pl-c\"\u003e//队列队顶元素始终为最大值\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e() {\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e();\n    }\n}\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e) {\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e;\n        }\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e;\n        \u003cspan class=\"pl-c\"\u003e//存放结果元素的数组\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e];\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n        \u003cspan class=\"pl-c\"\u003e//自定义队列\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e();\n        \u003cspan class=\"pl-c\"\u003e//先将前k的元素放入队列\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eadd\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]);\n        }\n        \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e++] = \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e();\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-c\"\u003e//滑动窗口移除最前面的元素，移除是判断该元素是否放入队列\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e]);\n            \u003cspan class=\"pl-c\"\u003e//滑动窗口加入最后面的元素\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eadd\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]);\n            \u003cspan class=\"pl-c\"\u003e//记录对应的最大值\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e++] = \u003cspan class=\"pl-s1\"\u003emyQueue\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e();\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e;\n    }\n}\n\n\u003cspan class=\"pl-c\"\u003e//解法二\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//利用双端队列手动实现单调队列\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e * 用一个单调队列来存储对应的下标，每当窗口滑动的时候，直接取队列的头部指针对应的值放入结果集即可\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e * 单调队列类似 （tail --\u0026gt;） 3 --\u0026gt; 2 --\u0026gt; 1 --\u0026gt; 0 (--\u0026gt; head) (右边为头结点，元素存的是下标)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e */\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e, \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e) {\n        \u003cspan class=\"pl-smi\"\u003eArrayDeque\u003c/span\u003e\u0026lt;\u003cspan class=\"pl-smi\"\u003eInteger\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eArrayDeque\u003c/span\u003e\u0026lt;\u0026gt;();\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e;\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[] \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e];\n        \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eidx\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-c\"\u003e// 根据题意，i为nums下标，是要在[i - k + 1, i] 中选到最大值，只需要保证两点\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e// 1.队列头结点需要在[i - k + 1, i]范围内，不符合则要弹出\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(!\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e() \u0026lt; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e){\n                \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e();\n            }\n            \u003cspan class=\"pl-c\"\u003e// 2.既然是单调，就要保证每次放进去的数字要比末尾的都大，否则也弹出\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(!\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeekLast\u003c/span\u003e()] \u0026lt; \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]) {\n                \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epollLast\u003c/span\u003e();\n            }\n\n            \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eoffer\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e);\n\n            \u003cspan class=\"pl-c\"\u003e// 因为单调，当i增长到符合第一个k范围的时候，每滑动一步都将队列头节点放入结果就行了\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u0026gt;= \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e){\n                \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003eidx\u003c/span\u003e++] = \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e()];\n            }\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e;\n    }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePython：\u003c/h3\u003e\u003ca id=\"user-content-python\" class=\"anchor\" aria-label=\"Permalink: Python：\" href=\"#python\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from collections import deque\n\n\nclass MyQueue: #单调队列（从大到小\n    def __init__(self):\n        self.queue = deque() #这里需要使用deque实现单调队列，直接使用list会超时\n    \n    #每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\n    #同时pop之前判断队列当前是否为空。\n    def pop(self, value):\n        if self.queue and value == self.queue[0]:\n            self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()\n            \n    #如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\n    #这样就保持了队列里的数值是单调从大到小的了。\n    def push(self, value):\n        while self.queue and value \u0026gt; self.queue[-1]:\n            self.queue.pop()\n        self.queue.append(value)\n        \n    #查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\n    def front(self):\n        return self.queue[0]\n    \nclass Solution:\n    def maxSlidingWindow(self, nums: List[int], k: int) -\u0026gt; List[int]:\n        que = MyQueue()\n        result = []\n        for i in range(k): #先将前k的元素放进队列\n            que.push(nums[i])\n        result.append(que.front()) #result 记录前k的元素的最大值\n        for i in range(k, len(nums)):\n            que.pop(nums[i - k]) #滑动窗口移除最前面元素\n            que.push(nums[i]) #滑动窗口前加入最后面的元素\n            result.append(que.front()) #记录对应的最大值\n        return result\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecollections\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e\n\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMyQueue\u003c/span\u003e: \u003cspan class=\"pl-c\"\u003e#单调队列（从大到小\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003e__init__\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003edeque\u003c/span\u003e() \u003cspan class=\"pl-c\"\u003e#这里需要使用deque实现单调队列，直接使用list会超时\u003c/span\u003e\n    \n    \u003cspan class=\"pl-c\"\u003e#每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e#同时pop之前判断队列当前是否为空。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e):\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]:\n            \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epopleft\u003c/span\u003e()\u003cspan class=\"pl-c\"\u003e#list.pop()时间复杂度为O(n),这里需要使用collections.deque()\u003c/span\u003e\n            \n    \u003cspan class=\"pl-c\"\u003e#如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e#这样就保持了队列里的数值是单调从大到小的了。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e):\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]:\n            \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e()\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e)\n        \n    \u003cspan class=\"pl-c\"\u003e#查询当前队列里的最大值 直接返回队列前端也就是front就可以了。\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n    \n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eList\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e], \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eList\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e]:\n        \u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e()\n        \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e []\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e): \u003cspan class=\"pl-c\"\u003e#先将前k的元素放进队列\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n        \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()) \u003cspan class=\"pl-c\"\u003e#result 记录前k的元素的最大值\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e)):\n            \u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e]) \u003cspan class=\"pl-c\"\u003e#滑动窗口移除最前面元素\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e]) \u003cspan class=\"pl-c\"\u003e#滑动窗口前加入最后面的元素\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eque\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e()) \u003cspan class=\"pl-c\"\u003e#记录对应的最大值\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGo：\u003c/h3\u003e\u003ca id=\"user-content-go\" class=\"anchor\" aria-label=\"Permalink: Go：\" href=\"#go\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 封装单调队列的方式解题\ntype MyQueue struct {\n    queue []int\n}\n\nfunc NewMyQueue() *MyQueue {\n    return \u0026amp;MyQueue{\n        queue: make([]int, 0),\n    }\n}\n\nfunc (m *MyQueue) Front() int {\n    return m.queue[0]\n}\n\nfunc (m *MyQueue) Back() int {\n    return m.queue[len(m.queue)-1]\n}\n\nfunc (m *MyQueue) Empty() bool {\n    return len(m.queue) == 0\n}\n\nfunc (m *MyQueue) Push(val int) {\n    for !m.Empty() \u0026amp;\u0026amp; val \u0026gt; m.Back() {\n        m.queue = m.queue[:len(m.queue)-1]\n    }\n    m.queue = append(m.queue, val)\n}\n\nfunc (m *MyQueue) Pop(val int) {\n    if !m.Empty() \u0026amp;\u0026amp; val == m.Front() {\n        m.queue = m.queue[1:]\n    }\n}\n\nfunc maxSlidingWindow(nums []int, k int) []int {\n    queue := NewMyQueue()\n    length := len(nums)\n    res := make([]int, 0)\n    // 先将前k个元素放入队列\n    for i := 0; i \u0026lt; k; i++ {\n        queue.Push(nums[i])\n    }\n    // 记录前k个元素的最大值\n    res = append(res, queue.Front())\n\n    for i := k; i \u0026lt; length; i++ {\n        // 滑动窗口移除最前面的元素\n        queue.Pop(nums[i-k])\n        // 滑动窗口添加最后面的元素\n        queue.Push(nums[i])\n        // 记录最大值\n        res = append(res, queue.Front())\n    }\n    return res\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// 封装单调队列的方式解题\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003etype\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e {\n    \u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eNewMyQueue\u003c/span\u003e() \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e{\n        \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003emake\u003c/span\u003e([]\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e),\n    }\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003eFront\u003c/span\u003e() \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003eBack\u003c/span\u003e() \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003eEmpty\u003c/span\u003e() \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003ePush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) {\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eEmpty\u003c/span\u003e() \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eBack\u003c/span\u003e() {\n        \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[:\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n    }\n    \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e)\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003ePop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eEmpty\u003c/span\u003e() \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eFront\u003c/span\u003e() {\n        \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e:]\n    }\n}\n\n\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e) []\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e {\n    \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eNewMyQueue\u003c/span\u003e()\n    \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e)\n    \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emake\u003c/span\u003e([]\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e)\n    \u003cspan class=\"pl-c\"\u003e// 先将前k个元素放入队列\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e {\n        \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n    }\n    \u003cspan class=\"pl-c\"\u003e// 记录前k个元素的最大值\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eFront\u003c/span\u003e())\n\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e {\n        \u003cspan class=\"pl-c\"\u003e// 滑动窗口移除最前面的元素\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e])\n        \u003cspan class=\"pl-c\"\u003e// 滑动窗口添加最后面的元素\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n        \u003cspan class=\"pl-c\"\u003e// 记录最大值\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eFront\u003c/span\u003e())\n    }\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJavascript:\u003c/h3\u003e\u003ca id=\"user-content-javascript\" class=\"anchor\" aria-label=\"Permalink: Javascript:\" href=\"#javascript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"/**\n * @param {number[]} nums\n * @param {number} k\n * @return {number[]}\n */\nvar maxSlidingWindow = function (nums, k) {\n    class MonoQueue {\n        queue;\n        constructor() {\n            this.queue = [];\n        }\n        enqueue(value) {\n            let back = this.queue[this.queue.length - 1];\n            while (back !== undefined \u0026amp;\u0026amp; back \u0026lt; value) {\n                this.queue.pop();\n                back = this.queue[this.queue.length - 1];\n            }\n            this.queue.push(value);\n        }\n        dequeue(value) {\n            let front = this.front();\n            if (front === value) {\n                this.queue.shift();\n            }\n        }\n        front() {\n            return this.queue[0];\n        }\n    }\n    let helperQueue = new MonoQueue();\n    let i = 0, j = 0;\n    let resArr = [];\n    while (j \u0026lt; k) {\n        helperQueue.enqueue(nums[j++]);\n    }\n    resArr.push(helperQueue.front());\n    while (j \u0026lt; nums.length) {\n        helperQueue.enqueue(nums[j]);\n        helperQueue.dequeue(nums[i]);\n        resArr.push(helperQueue.front());\n        i++, j++;\n    }\n    return resArr;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e * \u003cspan class=\"pl-k\"\u003e@param\u003c/span\u003e {\u003cspan class=\"pl-smi\"\u003enumber[]\u003c/span\u003e} nums\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e * \u003cspan class=\"pl-k\"\u003e@param\u003c/span\u003e {\u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e} k\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e * \u003cspan class=\"pl-k\"\u003e@return\u003c/span\u003e {\u003cspan class=\"pl-smi\"\u003enumber[]\u003c/span\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e */\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMonoQueue\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003econstructor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003edequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efront\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efront\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMonoQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTypeScript：\u003c/h3\u003e\u003ca id=\"user-content-typescript\" class=\"anchor\" aria-label=\"Permalink: TypeScript：\" href=\"#typescript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ts notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"function maxSlidingWindow(nums: number[], k: number): number[] {\n    /** 单调递减队列 */\n    class MonoQueue {\n        private queue: number[];\n        constructor() {\n            this.queue = [];\n        };\n        /** 入队：value如果大于队尾元素，则将队尾元素删除，直至队尾元素大于value，或者队列为空 */\n        public enqueue(value: number): void {\n            let back: number | undefined = this.queue[this.queue.length - 1];\n            while (back !== undefined \u0026amp;\u0026amp; back \u0026lt; value) {\n                this.queue.pop();\n                back = this.queue[this.queue.length - 1];\n            }\n            this.queue.push(value);\n        };\n        /** 出队：只有当队头元素等于value，才出队 */\n        public dequeue(value: number): void {\n            let top: number | undefined = this.top();\n            if (top !== undefined \u0026amp;\u0026amp; top === value) {\n                this.queue.shift();\n            }\n        }\n        public top(): number | undefined {\n            return this.queue[0];\n        }\n    }\n    const helperQueue: MonoQueue = new MonoQueue();\n    let i: number = 0,\n        j: number = 0;\n    let resArr: number[] = [];\n    while (j \u0026lt; k) {\n        helperQueue.enqueue(nums[j++]);\n    }\n    resArr.push(helperQueue.top()!);\n    while (j \u0026lt; nums.length) {\n        helperQueue.enqueue(nums[j]);\n        helperQueue.dequeue(nums[i]);\n        resArr.push(helperQueue.top()!);\n        j++, i++;\n    }\n    return resArr;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e/** 单调递减队列 */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMonoQueue\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eprivate\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003econstructor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e/** 入队：value如果大于队尾元素，则将队尾元素删除，直至队尾元素大于value，或者队列为空 */\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003e\u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003eback\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e/** 出队：只有当队头元素等于value，才出队 */\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-en\"\u003edequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003e\u003cspan class=\"pl-k\"\u003evoid\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etop\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etop\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etop\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eundefined\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eMonoQueue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMonoQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresArr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSwift:\u003c/h3\u003e\u003ca id=\"user-content-swift\" class=\"anchor\" aria-label=\"Permalink: Swift:\" href=\"#swift\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e解法一:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"/// 双向链表\nclass DoublyListNode {\n    var head: DoublyListNode?\n    var tail: DoublyListNode?\n    var next: DoublyListNode?\n    var pre: DoublyListNode?\n    var value: Int = 0\n    init(_ value: Int = 0) {\n        self.value = value\n    }\n    func isEmpty() -\u0026gt; Bool {\n        return self.head == nil\n    }\n    func first() -\u0026gt; Int? {\n        return self.head?.value\n    }\n    func last() -\u0026gt; Int? {\n        return self.tail?.value\n    }\n    func removeFirst() {\n        if isEmpty() {\n            return\n        }\n        let next = self.head!.next\n        self.head?.next = nil// 移除首节点\n        next?.pre = nil\n        self.head = next\n    }\n    func removeLast() {\n        if let tail = self.tail {\n            if let pre = tail.pre {\n                self.tail?.pre = nil\n                pre.next = nil\n                self.tail = pre\n            } else {\n                self.head = nil\n                self.tail = nil\n            }\n        }\n    }\n    func append(_ value: Int) {\n        let node = DoublyListNode(value)\n        if self.head != nil {\n            node.pre = self.tail\n            self.tail?.next = node\n            self.tail = node\n        } else {\n            self.head = node\n            self.tail = node\n            self.pre = nil\n            self.next = nil\n        }\n    }\n}\n// 单调队列, 从大到小\nclass MyQueue {\n//    var queue: [Int]!// 用数组会超时\n    var queue: DoublyListNode!\n    init() {\n//        queue = [Int]()\n        queue = DoublyListNode()\n    }\n    // 滑动窗口时弹出第一个元素, 如果相等再弹出\n    func pop(x: Int) {\n        if !queue.isEmpty() \u0026amp;\u0026amp; front() == x {\n            queue.removeFirst()\n        }\n    }\n    // 滑动窗口时添加下一个元素, 移除队尾比 x 小的元素 始终保证队头 \u0026gt; 队尾\n    func push(x: Int) {\n        while !queue.isEmpty() \u0026amp;\u0026amp; queue.last()! \u0026lt; x {\n            queue.removeLast()\n        }\n        queue.append(x)\n    }\n    // 此时队头就是滑动窗口最大值\n    func front() -\u0026gt; Int {\n        return queue.first() ?? -1\n    }\n}\n\nclass Solution {\n    func maxSlidingWindow(_ nums: [Int], _ k: Int) -\u0026gt; [Int] {\n        // 存放结果\n        var res = [Int]()\n        let queue = MyQueue()\n        // 先将前K个元素放入队列\n        for i in 0 ..\u0026lt; k {\n            queue.push(x: nums[i])\n        }\n        // 添加当前队列最大值到结果数组\n        res.append(queue.front())\n        for i in k ..\u0026lt; nums.count {\n            // 滑动窗口移除最前面元素\n            queue.pop(x: nums[i - k])\n            // 滑动窗口添加下一个元素\n            queue.push(x: nums[i])\n            // 保存当前队列最大值\n            res.append(queue.front())\n        }\n        return res\n    }\n}\"\u003e\u003cpre\u003e/// 双向链表\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003ehead\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003etail\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003enext\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003epre\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003evalue\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ value\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003evalue \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e value\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e isEmpty\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eBool\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e first\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003evalue\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e last\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003evalue\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e removeFirst\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead!\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003enext\n        \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003enext \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e// 移除首节点\n        next\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003epre \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e next\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e removeLast\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e tail \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e pre \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e tail\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003epre \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003epre \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n                pre\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003enext \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e pre\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n                \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e append\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ value\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003evalue\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003epre \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003enext \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ehead \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003etail \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003epre \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n            \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003enext \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n// 单调队列, 从大到小\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMyQueue\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n//    var queue: [Int]!// 用数组会超时\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n//        queue = [Int]()\n        queue \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDoublyListNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    // 滑动窗口时弹出第一个元素, 如果相等再弹出\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e pop\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e !queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u0026amp;\u0026amp; \u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e x \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    // 滑动窗口时添加下一个元素, 移除队尾比 x 小的元素 始终保证队头 \u0026gt; 队尾\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e push\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u0026amp;\u0026amp; queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e! \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e x \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    // 此时队头就是滑动窗口最大值\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e front\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e??\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e maxSlidingWindow\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ nums\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e _ k\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        // 存放结果\n        \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eInt\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        // 先将前K个元素放入队列\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e..\u0026lt;\u003c/span\u003e k \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        // 添加当前队列最大值到结果数组\n        res\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003equeue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e k \u003cspan class=\"pl-c1\"\u003e..\u0026lt;\u003c/span\u003e nums\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ecount \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            // 滑动窗口移除最前面元素\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e k\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n            // 滑动窗口添加下一个元素\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ex\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n            // 保存当前队列最大值\n            res\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003equeue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e res\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSwift解法二：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func maxSlidingWindow(_ nums: [Int], _ k: Int) -\u0026gt; [Int] {\n    var result = [Int]()\n    var window = [Int]()\n    var right = 0, left = right - k + 1\n\n    while right \u0026lt; nums.count {\n        let value = nums[right]\n\n        // 因为窗口移动丢弃的左边数\n        if left \u0026gt; 0, left - 1 == window.first {\n            window.removeFirst()\n        }\n\n        // 保证末尾的是最大的\n        while !window.isEmpty, value \u0026gt; nums[window.last!] {\n            window.removeLast()\n        }\n        window.append(right)\n\n        if left \u0026gt;= 0 { // 窗口形成\n            result.append(nums[window.first!])\n        }\n\n        right += 1\n        left += 1\n    }\n\n    return result\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e maxSlidingWindow\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ nums\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e _ k\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eInt\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eInt\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eInt\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e right \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e k \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e right \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e nums\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ecount \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\n        // 因为窗口移动丢弃的左边数\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e left \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e left \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e window\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003efirst \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            window\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        // 保证末尾的是最大的\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !window\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eisEmpty\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e value \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ewindow\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003elast!\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            window\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        window\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e left \u003cspan class=\"pl-c1\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e // 窗口形成\n            result\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003ewindow\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003efirst!\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        right \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n        left \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e result\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eScala:\u003c/h3\u003e\u003ca id=\"user-content-scala\" class=\"anchor\" aria-label=\"Permalink: Scala:\" href=\"#scala\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-scala notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import scala.collection.mutable.ArrayBuffer\nobject Solution {\n  def maxSlidingWindow(nums: Array[Int], k: Int): Array[Int] = {\n    var len = nums.length - k + 1   // 滑动窗口长度\n    var res: Array[Int] = new Array[Int](len)   // 声明存储结果的数组\n    var index = 0   // 结果数组指针\n    val queue: MyQueue = new MyQueue    // 自定义队列\n    // 将前k个添加到queue\n    for (i \u0026lt;- 0 until k) {\n      queue.add(nums(i))\n    }\n    res(index) = queue.peek // 第一个滑动窗口的最大值\n    index += 1\n    for (i \u0026lt;- k until nums.length) {\n      queue.poll(nums(i - k))   // 首先移除第i-k个元素\n      queue.add(nums(i))        // 添加当前数字到队列\n      res(index) = queue.peek() // 赋值\n      index+=1\n    }\n    // 最终返回res，return关键字可以省略\n    res\n  }\n }\n\nclass MyQueue {\n  var queue = ArrayBuffer[Int]()\n\n  // 移除元素，如果传递进来的跟队头相等，那么移除\n  def poll(value: Int): Unit = {\n    if (!queue.isEmpty \u0026amp;\u0026amp; queue.head == value) {\n      queue.remove(0)\n    }\n  }\n\n  // 添加元素，当队尾大于当前元素就删除\n  def add(value: Int): Unit = {\n    while (!queue.isEmpty \u0026amp;\u0026amp; value \u0026gt; queue.last) {\n      queue.remove(queue.length - 1)\n    }\n    queue.append(value)\n  }\n\n  def peek(): Int = queue.head\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-en\"\u003escala\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003ecollection\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003emutable\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eArrayBuffer\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eobject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003enums\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e], \u003cspan class=\"pl-v\"\u003ek\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e] \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003elen\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e nums.length \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e k \u003cspan class=\"pl-k\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 滑动窗口长度\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e] \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e](len)   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 声明存储结果的数组\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eindex\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 结果数组指针\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-v\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 自定义队列\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 将前k个添加到queue\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (i \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e until k) {\n      queue.add(nums(i))\n    }\n    res(index) \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e queue.peek \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 第一个滑动窗口的最大值\u003c/span\u003e\n    index \u003cspan class=\"pl-k\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (i \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e k until nums.length) {\n      queue.poll(nums(i \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e k))   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 首先移除第i-k个元素\u003c/span\u003e\n      queue.add(nums(i))        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 添加当前数字到队列\u003c/span\u003e\n      res(index) \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e queue.peek() \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 赋值\u003c/span\u003e\n      index\u003cspan class=\"pl-k\"\u003e+=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n    }\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 最终返回res，return关键字可以省略\u003c/span\u003e\n    res\n  }\n }\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMyQueue\u003c/span\u003e {\n  \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArrayBuffer\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e]()\n\n  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 移除元素，如果传递进来的跟队头相等，那么移除\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003evalue\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eUnit\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003e!\u003c/span\u003equeue.isEmpty \u003cspan class=\"pl-k\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e queue.head \u003cspan class=\"pl-k\"\u003e==\u003c/span\u003e value) {\n      queue.remove(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e)\n    }\n  }\n\n  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 添加元素，当队尾大于当前元素就删除\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eadd\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003evalue\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eUnit\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003e!\u003c/span\u003equeue.isEmpty \u003cspan class=\"pl-k\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e value \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e queue.last) {\n      queue.remove(queue.length \u003cspan class=\"pl-k\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)\n    }\n    queue.append(value)\n  }\n\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epeek\u003c/span\u003e()\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eInt\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e queue.head\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePHP:\u003c/h3\u003e\u003ca id=\"user-content-php\" class=\"anchor\" aria-label=\"Permalink: PHP:\" href=\"#php\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-text-html-php notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\n    /**\n     * @param Integer[] $nums\n     * @param Integer $k\n     * @return Integer[]\n     */\n    function maxSlidingWindow($nums, $k) {\n        $myQueue = new MyQueue();\n        // 先将前k的元素放进队列\n        for ($i = 0; $i \u0026lt; $k; $i++) { \n            $myQueue-\u0026gt;push($nums[$i]);\n        }\n\n        $result = [];\n        $result[] = $myQueue-\u0026gt;max(); // result 记录前k的元素的最大值\n\n        for ($i = $k; $i \u0026lt; count($nums); $i++) {\n            $myQueue-\u0026gt;pop($nums[$i - $k]); // 滑动窗口移除最前面元素\n            $myQueue-\u0026gt;push($nums[$i]); // 滑动窗口前加入最后面的元素\n            $result[]= $myQueue-\u0026gt;max(); // 记录对应的最大值\n        }\n        return $result;\n    }\n\n}\n\n// 单调对列构建\nclass MyQueue{\n    private $queue;\n\n    public function __construct(){\n        $this-\u0026gt;queue = new SplQueue(); //底层是双向链表实现。\n    }\n\n    public function pop($v){\n        // 判断当前对列是否为空\n        // 比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\n        // bottom 从链表前端查看元素, dequeue 从双向链表的开头移动一个节点\n        if(!$this-\u0026gt;queue-\u0026gt;isEmpty() \u0026amp;\u0026amp; $v == $this-\u0026gt;queue-\u0026gt;bottom()){\n            $this-\u0026gt;queue-\u0026gt;dequeue(); //弹出队列\n        }\n    }\n\n    public function push($v){\n        // 判断当前对列是否为空\n        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\n        // 这样就保持了队列里的数值是单调从大到小的了。\n        while (!$this-\u0026gt;queue-\u0026gt;isEmpty() \u0026amp;\u0026amp; $v \u0026gt; $this-\u0026gt;queue-\u0026gt;top()) {\n            $this-\u0026gt;queue-\u0026gt;pop(); // pop从链表末尾弹出一个元素，\n        }\n        $this-\u0026gt;queue-\u0026gt;enqueue($v);\n    }\n\n    // 查询当前队列里的最大值 直接返回队首\n    public function max(){\n        // bottom 从链表前端查看元素, top从链表末尾查看元素\n        return $this-\u0026gt;queue-\u0026gt;bottom(); \n    }\n\n    // 辅助理解: 打印队列元素\n    public function println(){\n        // \u0026quot;迭代器移动到链表头部\u0026quot;: 可理解为从头遍历链表元素做准备。\n        // 【PHP中没有指针概念，所以就没说指针。从数据结构上理解，就是把指针指向链表头部】\n        $this-\u0026gt;queue-\u0026gt;rewind();\n\n        echo \u0026quot;Println: \u0026quot;;\n        while($this-\u0026gt;queue-\u0026gt;valid()){\n            echo $this-\u0026gt;queue-\u0026gt;current(),\u0026quot; -\u0026gt; \u0026quot;;\n            $this-\u0026gt;queue-\u0026gt;next();\n        }\n        echo \u0026quot;\\n\u0026quot;;\n    } \n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e Solution {\n    \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param Integer[] $nums\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @param Integer $k\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * @return Integer[]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003enums\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ek\u003c/span\u003e) {\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMyQueue\u003c/span\u003e();\n        \u003cspan class=\"pl-c\"\u003e// 先将前k的元素放进队列\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e++) { \n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e]);\n        }\n\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003eresult\u003c/span\u003e = [];\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003eresult\u003c/span\u003e[] = \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(); \u003cspan class=\"pl-c\"\u003e// result 记录前k的元素的最大值\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ek\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-en\"\u003ecount\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003enums\u003c/span\u003e); \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e++) {\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ek\u003c/span\u003e]); \u003cspan class=\"pl-c\"\u003e// 滑动窗口移除最前面元素\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003enums\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ei\u003c/span\u003e]); \u003cspan class=\"pl-c\"\u003e// 滑动窗口前加入最后面的元素\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003eresult\u003c/span\u003e[]= \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003emyQueue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(); \u003cspan class=\"pl-c\"\u003e// 记录对应的最大值\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003eresult\u003c/span\u003e;\n    }\n\n}\n\n\u003cspan class=\"pl-c\"\u003e// 单调对列构建\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e MyQueue{\n    \u003cspan class=\"pl-k\"\u003eprivate\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003equeue\u003c/span\u003e;\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003e__construct\u003c/span\u003e(){\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSplQueue\u003c/span\u003e(); \u003cspan class=\"pl-c\"\u003e//底层是双向链表实现。\u003c/span\u003e\n    }\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ev\u003c/span\u003e){\n        \u003cspan class=\"pl-c\"\u003e// 判断当前对列是否为空\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// bottom 从链表前端查看元素, dequeue 从双向链表的开头移动一个节点\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(!\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ev\u003c/span\u003e == \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003ebottom\u003c/span\u003e()){\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003edequeue\u003c/span\u003e(); \u003cspan class=\"pl-c\"\u003e//弹出队列\u003c/span\u003e\n        }\n    }\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ev\u003c/span\u003e){\n        \u003cspan class=\"pl-c\"\u003e// 判断当前对列是否为空\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 这样就保持了队列里的数值是单调从大到小的了。\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e() \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ev\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003etop\u003c/span\u003e()) {\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e(); \u003cspan class=\"pl-c\"\u003e// pop从链表末尾弹出一个元素，\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003eenqueue\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003ev\u003c/span\u003e);\n    }\n\n    \u003cspan class=\"pl-c\"\u003e// 查询当前队列里的最大值 直接返回队首\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(){\n        \u003cspan class=\"pl-c\"\u003e// bottom 从链表前端查看元素, top从链表末尾查看元素\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003ebottom\u003c/span\u003e(); \n    }\n\n    \u003cspan class=\"pl-c\"\u003e// 辅助理解: 打印队列元素\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eprintln\u003c/span\u003e(){\n        \u003cspan class=\"pl-c\"\u003e// \"迭代器移动到链表头部\": 可理解为从头遍历链表元素做准备。\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 【PHP中没有指针概念，所以就没说指针。从数据结构上理解，就是把指针指向链表头部】\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003erewind\u003c/span\u003e();\n\n        \u003cspan class=\"pl-k\"\u003eecho\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s\"\u003ePrintln: \u003c/span\u003e\"\u003c/span\u003e;\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003evalid\u003c/span\u003e()){\n            \u003cspan class=\"pl-k\"\u003eecho\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003ecurrent\u003c/span\u003e(),\u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s\"\u003e -\u0026gt; \u003c/span\u003e\"\u003c/span\u003e;\n            \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-c1\"\u003e$\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ethis\u003c/span\u003e\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-c1\"\u003equeue\u003c/span\u003e-\u0026gt;\u003cspan class=\"pl-en\"\u003enext\u003c/span\u003e();\n        }\n        \u003cspan class=\"pl-k\"\u003eecho\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\\n\"\u003c/span\u003e;\n    } \n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC#:\u003c/h3\u003e\u003ca id=\"user-content-c\" class=\"anchor\" aria-label=\"Permalink: C#:\" href=\"#c\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class myDequeue{\n        private LinkedList\u0026lt;int\u0026gt; linkedList = new LinkedList\u0026lt;int\u0026gt;();\n\n        public void Enqueue(int n){\n            while(linkedList.Count \u0026gt; 0 \u0026amp;\u0026amp; linkedList.Last.Value \u0026lt; n){\n                linkedList.RemoveLast();\n            }\n            linkedList.AddLast(n);\n        }\n\n        public int Max(){\n            return linkedList.First.Value;\n        }\n\n        public void Dequeue(int n){\n            if(linkedList.First.Value == n){\n                linkedList.RemoveFirst();\n            }   \n        }\n    }\n\n    myDequeue window = new myDequeue();\n    List\u0026lt;int\u0026gt; res = new List\u0026lt;int\u0026gt;();\n\n    public int[] MaxSlidingWindow(int[] nums, int k) {\n        for(int i = 0; i \u0026lt; k; i++){\n            window.Enqueue(nums[i]);\n        }\n        res.Add(window.Max());\n        for(int i = k; i \u0026lt; nums.Length; i++){\n            window.Dequeue(nums[i-k]);\n            window.Enqueue(nums[i]);\n            res.Add(window.Max());\n        }\n\n        return res.ToArray();\n    }\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003emyDequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eprivate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eLinkedList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eLinkedList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRemoveLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-s1\"\u003elinkedList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRemoveFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e   \n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"pl-smi\"\u003emyDequeue\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003emyDequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-smi\"\u003eList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMaxSlidingWindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEnqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eMax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDequeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEnqueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ewindow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eMax\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRust:\u003c/h3\u003e\u003ca id=\"user-content-rust\" class=\"anchor\" aria-label=\"Permalink: Rust:\" href=\"#rust\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-rust notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"impl Solution {\n    pub fn max_sliding_window(nums: Vec\u0026lt;i32\u0026gt;, k: i32) -\u0026gt; Vec\u0026lt;i32\u0026gt; {\n        let mut res = vec![];\n        let mut queue = VecDeque::with_capacity(k as usize);\n        for (i, \u0026amp;v) in nums.iter().enumerate() {\n            // 如果队列长度超过 k，那么需要移除队首过期元素\n            if i - queue.front().unwrap_or(\u0026amp;0) == k as usize {\n                queue.pop_front();\n            }\n            while let Some(\u0026amp;index) = queue.back() {\n                if nums[index] \u0026gt;= v {\n                    break;\n                }\n                // 如果队列第一个元素比当前元素小，那么就把队列第一个元素弹出\n                queue.pop_back();\n            }\n            queue.push_back(i);\n            if i \u0026gt;= k as usize - 1 {\n                res.push(nums[queue[0]]);\n            }\n        }\n        res\n    }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimpl\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epub\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efn\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emax_sliding_window\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enums\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eVec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ei32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ei32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e -\u0026gt; \u003cspan class=\"pl-smi\"\u003eVec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ei32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-k\"\u003emut\u003c/span\u003e res = \u003cspan class=\"pl-en\"\u003evec\u003c/span\u003e\u003cspan class=\"pl-en\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-k\"\u003emut\u003c/span\u003e queue = \u003cspan class=\"pl-smi\"\u003eVecDeque\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e::\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ewith_capacity\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ek \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003ev\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e nums\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eiter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eenumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e// 如果队列长度超过 k，那么需要移除队首过期元素\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e i - queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efront\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunwrap_or\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e == k \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop_front\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSome\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003eindex\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e = queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eback\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e nums\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eindex\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u0026gt;= v \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                    \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n                \u003cspan class=\"pl-c\"\u003e// 如果队列第一个元素比当前元素小，那么就把队列第一个元素弹出\u003c/span\u003e\n                queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop_back\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush_back\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ei\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e i \u0026gt;= k \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eusize\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                res\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enums\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003equeue\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        res\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC++\u003c/h3\u003e\u003ca id=\"user-content-c-1\" class=\"anchor\" aria-label=\"Permalink: C++\" href=\"#c-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用multiset作为单调队列\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e多重集合(\u003ccode\u003emultiset\u003c/code\u003e) 用以有序地存储元素的容器。允许存在相等的元素。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e在遍历原数组的时候，只需要把窗口的头元素加入到multiset中，然后把窗口的尾元素删除即可。因为multiset是有序的，并且提供了*rbegin()，可以直接获取窗口最大值。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    vector\u0026lt;int\u0026gt; maxSlidingWindow(vector\u0026lt;int\u0026gt;\u0026amp; nums, int k) {\n        multiset\u0026lt;int\u0026gt; st;\n        vector\u0026lt;int\u0026gt; ans;\n        for (int i = 0; i \u0026lt; nums.size(); i++) {\n            if (i \u0026gt;= k) st.erase(st.find(nums[i - k]));\n            st.insert(nums[i]);\n            if (i \u0026gt;= k - 1) ans.push_back(*st.rbegin());\n        }\n        return ans;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-en\"\u003emaxSlidingWindow\u003c/span\u003e(vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt;\u0026amp; nums, \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e k) {\n        multiset\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; st;\n        vector\u0026lt;\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e\u0026gt; ans;\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; i \u0026lt; nums.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(); i++) {\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (i \u0026gt;= k) st.\u003cspan class=\"pl-c1\"\u003eerase\u003c/span\u003e(st.\u003cspan class=\"pl-c1\"\u003efind\u003c/span\u003e(nums[i - k]));\n            st.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(nums[i]);\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (i \u0026gt;= k - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e) ans.\u003cspan class=\"pl-c1\"\u003epush_back\u003c/span\u003e(*st.\u003cspan class=\"pl-c1\"\u003erbegin\u003c/span\u003e());\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e ans;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://programmercarl.com/other/kstar.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"239. 滑动窗口最大值","fully_qualified_name":"239. 滑动窗口最大值","kind":"section_1","ident_start":376,"ident_end":402,"extent_start":374,"extent_end":28453,"ident_utf16":{"start":{"line_number":10,"utf16_col":2},"end":{"line_number":10,"utf16_col":14}},"extent_utf16":{"start":{"line_number":10,"utf16_col":0},"end":{"line_number":867,"utf16_col":0}}},{"name":"算法公开课","fully_qualified_name":"算法公开课","kind":"section_2","ident_start":1000,"ident_end":1015,"extent_start":997,"extent_end":1313,"ident_utf16":{"start":{"line_number":30,"utf16_col":3},"end":{"line_number":30,"utf16_col":8}},"extent_utf16":{"start":{"line_number":30,"utf16_col":0},"end":{"line_number":34,"utf16_col":0}}},{"name":"思路","fully_qualified_name":"思路","kind":"section_2","ident_start":1316,"ident_end":1322,"extent_start":1313,"extent_end":8788,"ident_utf16":{"start":{"line_number":34,"utf16_col":3},"end":{"line_number":34,"utf16_col":5}},"extent_utf16":{"start":{"line_number":34,"utf16_col":0},"end":{"line_number":198,"utf16_col":0}}},{"name":"扩展","fully_qualified_name":"扩展","kind":"section_2","ident_start":8791,"ident_end":8797,"extent_start":8788,"extent_end":9396,"ident_utf16":{"start":{"line_number":198,"utf16_col":3},"end":{"line_number":198,"utf16_col":5}},"extent_utf16":{"start":{"line_number":198,"utf16_col":0},"end":{"line_number":206,"utf16_col":0}}},{"name":"其他语言版本","fully_qualified_name":"其他语言版本","kind":"section_2","ident_start":9399,"ident_end":9417,"extent_start":9396,"extent_end":28453,"ident_utf16":{"start":{"line_number":206,"utf16_col":3},"end":{"line_number":206,"utf16_col":9}},"extent_utf16":{"start":{"line_number":206,"utf16_col":0},"end":{"line_number":867,"utf16_col":0}}},{"name":"Java：","fully_qualified_name":"Java：","kind":"section_3","ident_start":9423,"ident_end":9430,"extent_start":9419,"extent_end":12606,"ident_utf16":{"start":{"line_number":208,"utf16_col":4},"end":{"line_number":208,"utf16_col":9}},"extent_utf16":{"start":{"line_number":208,"utf16_col":0},"end":{"line_number":300,"utf16_col":0}}},{"name":"Python：","fully_qualified_name":"Python：","kind":"section_3","ident_start":12610,"ident_end":12619,"extent_start":12606,"extent_end":14308,"ident_utf16":{"start":{"line_number":300,"utf16_col":4},"end":{"line_number":300,"utf16_col":11}},"extent_utf16":{"start":{"line_number":300,"utf16_col":0},"end":{"line_number":341,"utf16_col":0}}},{"name":"Go：","fully_qualified_name":"Go：","kind":"section_3","ident_start":14312,"ident_end":14317,"extent_start":14308,"extent_end":15543,"ident_utf16":{"start":{"line_number":341,"utf16_col":4},"end":{"line_number":341,"utf16_col":7}},"extent_utf16":{"start":{"line_number":341,"utf16_col":0},"end":{"line_number":403,"utf16_col":0}}},{"name":"Javascript:","fully_qualified_name":"Javascript:","kind":"section_3","ident_start":15547,"ident_end":15558,"extent_start":15543,"extent_end":16698,"ident_utf16":{"start":{"line_number":403,"utf16_col":4},"end":{"line_number":403,"utf16_col":15}},"extent_utf16":{"start":{"line_number":403,"utf16_col":0},"end":{"line_number":452,"utf16_col":0}}},{"name":"TypeScript：","fully_qualified_name":"TypeScript：","kind":"section_3","ident_start":16702,"ident_end":16715,"extent_start":16698,"extent_end":18219,"ident_utf16":{"start":{"line_number":452,"utf16_col":4},"end":{"line_number":452,"utf16_col":15}},"extent_utf16":{"start":{"line_number":452,"utf16_col":0},"end":{"line_number":500,"utf16_col":0}}},{"name":"Swift:","fully_qualified_name":"Swift:","kind":"section_3","ident_start":18223,"ident_end":18229,"extent_start":18219,"extent_end":21727,"ident_utf16":{"start":{"line_number":500,"utf16_col":4},"end":{"line_number":500,"utf16_col":10}},"extent_utf16":{"start":{"line_number":500,"utf16_col":0},"end":{"line_number":643,"utf16_col":0}}},{"name":"Scala:","fully_qualified_name":"Scala:","kind":"section_3","ident_start":21731,"ident_end":21737,"extent_start":21727,"extent_end":23065,"ident_utf16":{"start":{"line_number":643,"utf16_col":4},"end":{"line_number":643,"utf16_col":10}},"extent_utf16":{"start":{"line_number":643,"utf16_col":0},"end":{"line_number":692,"utf16_col":0}}},{"name":"PHP:","fully_qualified_name":"PHP:","kind":"section_3","ident_start":23069,"ident_end":23073,"extent_start":23065,"extent_end":25665,"ident_utf16":{"start":{"line_number":692,"utf16_col":4},"end":{"line_number":692,"utf16_col":8}},"extent_utf16":{"start":{"line_number":692,"utf16_col":0},"end":{"line_number":770,"utf16_col":0}}},{"name":"C#:","fully_qualified_name":"C#:","kind":"section_3","ident_start":25669,"ident_end":25672,"extent_start":25665,"extent_end":26670,"ident_utf16":{"start":{"line_number":770,"utf16_col":4},"end":{"line_number":770,"utf16_col":7}},"extent_utf16":{"start":{"line_number":770,"utf16_col":0},"end":{"line_number":812,"utf16_col":0}}},{"name":"Rust:","fully_qualified_name":"Rust:","kind":"section_3","ident_start":26674,"ident_end":26679,"extent_start":26670,"extent_end":27556,"ident_utf16":{"start":{"line_number":812,"utf16_col":4},"end":{"line_number":812,"utf16_col":9}},"extent_utf16":{"start":{"line_number":812,"utf16_col":0},"end":{"line_number":841,"utf16_col":0}}},{"name":"C++","fully_qualified_name":"C++","kind":"section_3","ident_start":27560,"ident_end":27563,"extent_start":27556,"extent_end":28453,"ident_utf16":{"start":{"line_number":841,"utf16_col":4},"end":{"line_number":841,"utf16_col":7}},"extent_utf16":{"start":{"line_number":841,"utf16_col":0},"end":{"line_number":867,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":793905675,"defaultBranch":"master","name":"leetcode-master","ownerLogin":"feinan","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2024-04-30T05:06:31.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1912535?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"9-kuAKB1W90H3MqmdemI32dLWstqM0dsyBhOHQ4eOCBBW4nzboF12_Z9VKQaQFiKawmYAi_yvezH6tBgYqiPyg","allShortcutsEnabled":false,"treeExpanded":true,"path":"problems/0239.滑动窗口最大值.md","symbolsExpanded":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"currentOid":"b07e850a199dae1777d8831e9e811d87725396b4"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"problems":{"items":[{"name":"kamacoder","path":"problems/kamacoder","contentType":"directory"},{"name":"qita","path":"problems/qita","contentType":"directory"},{"name":"前序","path":"problems/前序","contentType":"directory"},{"name":"周总结","path":"problems/周总结","contentType":"directory"},{"name":"0001.两数之和.md","path":"problems/0001.两数之和.md","contentType":"file"},{"name":"0005.最长回文子串.md","path":"problems/0005.最长回文子串.md","contentType":"file"},{"name":"0015.三数之和.md","path":"problems/0015.三数之和.md","contentType":"file"},{"name":"0017.电话号码的字母组合.md","path":"problems/0017.电话号码的字母组合.md","contentType":"file"},{"name":"0018.四数之和.md","path":"problems/0018.四数之和.md","contentType":"file"},{"name":"0019.删除链表的倒数第N个节点.md","path":"problems/0019.删除链表的倒数第N个节点.md","contentType":"file"},{"name":"0020.有效的括号.md","path":"problems/0020.有效的括号.md","contentType":"file"},{"name":"0024.两两交换链表中的节点.md","path":"problems/0024.两两交换链表中的节点.md","contentType":"file"},{"name":"0027.移除元素.md","path":"problems/0027.移除元素.md","contentType":"file"},{"name":"0028.实现strStr.md","path":"problems/0028.实现strStr.md","contentType":"file"},{"name":"0031.下一个排列.md","path":"problems/0031.下一个排列.md","contentType":"file"},{"name":"0034.在排序数组中查找元素的第一个和最后一个位置.md","path":"problems/0034.在排序数组中查找元素的第一个和最后一个位置.md","contentType":"file"},{"name":"0035.搜索插入位置.md","path":"problems/0035.搜索插入位置.md","contentType":"file"},{"name":"0037.解数独.md","path":"problems/0037.解数独.md","contentType":"file"},{"name":"0039.组合总和.md","path":"problems/0039.组合总和.md","contentType":"file"},{"name":"0040.组合总和II.md","path":"problems/0040.组合总和II.md","contentType":"file"},{"name":"0042.接雨水.md","path":"problems/0042.接雨水.md","contentType":"file"},{"name":"0045.跳跃游戏II.md","path":"problems/0045.跳跃游戏II.md","contentType":"file"},{"name":"0046.全排列.md","path":"problems/0046.全排列.md","contentType":"file"},{"name":"0047.全排列II.md","path":"problems/0047.全排列II.md","contentType":"file"},{"name":"0051.N皇后.md","path":"problems/0051.N皇后.md","contentType":"file"},{"name":"0052.N皇后II.md","path":"problems/0052.N皇后II.md","contentType":"file"},{"name":"0053.最大子序和.md","path":"problems/0053.最大子序和.md","contentType":"file"},{"name":"0053.最大子序和（动态规划）.md","path":"problems/0053.最大子序和（动态规划）.md","contentType":"file"},{"name":"0054.螺旋矩阵.md","path":"problems/0054.螺旋矩阵.md","contentType":"file"},{"name":"0055.跳跃游戏.md","path":"problems/0055.跳跃游戏.md","contentType":"file"},{"name":"0056.合并区间.md","path":"problems/0056.合并区间.md","contentType":"file"},{"name":"0059.螺旋矩阵II.md","path":"problems/0059.螺旋矩阵II.md","contentType":"file"},{"name":"0062.不同路径.md","path":"problems/0062.不同路径.md","contentType":"file"},{"name":"0063.不同路径II.md","path":"problems/0063.不同路径II.md","contentType":"file"},{"name":"0070.爬楼梯.md","path":"problems/0070.爬楼梯.md","contentType":"file"},{"name":"0070.爬楼梯完全背包版本.md","path":"problems/0070.爬楼梯完全背包版本.md","contentType":"file"},{"name":"0072.编辑距离.md","path":"problems/0072.编辑距离.md","contentType":"file"},{"name":"0077.组合.md","path":"problems/0077.组合.md","contentType":"file"},{"name":"0077.组合优化.md","path":"problems/0077.组合优化.md","contentType":"file"},{"name":"0078.子集.md","path":"problems/0078.子集.md","contentType":"file"},{"name":"0084.柱状图中最大的矩形.md","path":"problems/0084.柱状图中最大的矩形.md","contentType":"file"},{"name":"0090.子集II.md","path":"problems/0090.子集II.md","contentType":"file"},{"name":"0093.复原IP地址.md","path":"problems/0093.复原IP地址.md","contentType":"file"},{"name":"0096.不同的二叉搜索树.md","path":"problems/0096.不同的二叉搜索树.md","contentType":"file"},{"name":"0098.验证二叉搜索树.md","path":"problems/0098.验证二叉搜索树.md","contentType":"file"},{"name":"0100.相同的树.md","path":"problems/0100.相同的树.md","contentType":"file"},{"name":"0101.对称二叉树.md","path":"problems/0101.对称二叉树.md","contentType":"file"},{"name":"0102.二叉树的层序遍历.md","path":"problems/0102.二叉树的层序遍历.md","contentType":"file"},{"name":"0104.二叉树的最大深度.md","path":"problems/0104.二叉树的最大深度.md","contentType":"file"},{"name":"0106.从中序与后序遍历序列构造二叉树.md","path":"problems/0106.从中序与后序遍历序列构造二叉树.md","contentType":"file"},{"name":"0108.将有序数组转换为二叉搜索树.md","path":"problems/0108.将有序数组转换为二叉搜索树.md","contentType":"file"},{"name":"0110.平衡二叉树.md","path":"problems/0110.平衡二叉树.md","contentType":"file"},{"name":"0111.二叉树的最小深度.md","path":"problems/0111.二叉树的最小深度.md","contentType":"file"},{"name":"0112.路径总和.md","path":"problems/0112.路径总和.md","contentType":"file"},{"name":"0115.不同的子序列.md","path":"problems/0115.不同的子序列.md","contentType":"file"},{"name":"0116.填充每个节点的下一个右侧节点指针.md","path":"problems/0116.填充每个节点的下一个右侧节点指针.md","contentType":"file"},{"name":"0121.买卖股票的最佳时机.md","path":"problems/0121.买卖股票的最佳时机.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II.md","path":"problems/0122.买卖股票的最佳时机II.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II（动态规划）.md","path":"problems/0122.买卖股票的最佳时机II（动态规划）.md","contentType":"file"},{"name":"0123.买卖股票的最佳时机III.md","path":"problems/0123.买卖股票的最佳时机III.md","contentType":"file"},{"name":"0127.单词接龙.md","path":"problems/0127.单词接龙.md","contentType":"file"},{"name":"0129.求根到叶子节点数字之和.md","path":"problems/0129.求根到叶子节点数字之和.md","contentType":"file"},{"name":"0130.被围绕的区域.md","path":"problems/0130.被围绕的区域.md","contentType":"file"},{"name":"0131.分割回文串.md","path":"problems/0131.分割回文串.md","contentType":"file"},{"name":"0132.分割回文串II.md","path":"problems/0132.分割回文串II.md","contentType":"file"},{"name":"0134.加油站.md","path":"problems/0134.加油站.md","contentType":"file"},{"name":"0135.分发糖果.md","path":"problems/0135.分发糖果.md","contentType":"file"},{"name":"0139.单词拆分.md","path":"problems/0139.单词拆分.md","contentType":"file"},{"name":"0141.环形链表.md","path":"problems/0141.环形链表.md","contentType":"file"},{"name":"0142.环形链表II.md","path":"problems/0142.环形链表II.md","contentType":"file"},{"name":"0143.重排链表.md","path":"problems/0143.重排链表.md","contentType":"file"},{"name":"0150.逆波兰表达式求值.md","path":"problems/0150.逆波兰表达式求值.md","contentType":"file"},{"name":"0151.翻转字符串里的单词.md","path":"problems/0151.翻转字符串里的单词.md","contentType":"file"},{"name":"0160.相交链表.md","path":"problems/0160.相交链表.md","contentType":"file"},{"name":"0188.买卖股票的最佳时机IV.md","path":"problems/0188.买卖股票的最佳时机IV.md","contentType":"file"},{"name":"0189.旋转数组.md","path":"problems/0189.旋转数组.md","contentType":"file"},{"name":"0198.打家劫舍.md","path":"problems/0198.打家劫舍.md","contentType":"file"},{"name":"0200.岛屿数量.广搜版.md","path":"problems/0200.岛屿数量.广搜版.md","contentType":"file"},{"name":"0200.岛屿数量.深搜版.md","path":"problems/0200.岛屿数量.深搜版.md","contentType":"file"},{"name":"0202.快乐数.md","path":"problems/0202.快乐数.md","contentType":"file"},{"name":"0203.移除链表元素.md","path":"problems/0203.移除链表元素.md","contentType":"file"},{"name":"0205.同构字符串.md","path":"problems/0205.同构字符串.md","contentType":"file"},{"name":"0206.翻转链表.md","path":"problems/0206.翻转链表.md","contentType":"file"},{"name":"0207.课程表.md","path":"problems/0207.课程表.md","contentType":"file"},{"name":"0209.长度最小的子数组.md","path":"problems/0209.长度最小的子数组.md","contentType":"file"},{"name":"0213.打家劫舍II.md","path":"problems/0213.打家劫舍II.md","contentType":"file"},{"name":"0216.组合总和III.md","path":"problems/0216.组合总和III.md","contentType":"file"},{"name":"0222.完全二叉树的节点个数.md","path":"problems/0222.完全二叉树的节点个数.md","contentType":"file"},{"name":"0225.用队列实现栈.md","path":"problems/0225.用队列实现栈.md","contentType":"file"},{"name":"0226.翻转二叉树.md","path":"problems/0226.翻转二叉树.md","contentType":"file"},{"name":"0232.用栈实现队列.md","path":"problems/0232.用栈实现队列.md","contentType":"file"},{"name":"0234.回文链表.md","path":"problems/0234.回文链表.md","contentType":"file"},{"name":"0235.二叉搜索树的最近公共祖先.md","path":"problems/0235.二叉搜索树的最近公共祖先.md","contentType":"file"},{"name":"0236.二叉树的最近公共祖先.md","path":"problems/0236.二叉树的最近公共祖先.md","contentType":"file"},{"name":"0239.滑动窗口最大值.md","path":"problems/0239.滑动窗口最大值.md","contentType":"file"},{"name":"0242.有效的字母异位词.md","path":"problems/0242.有效的字母异位词.md","contentType":"file"},{"name":"0257.二叉树的所有路径.md","path":"problems/0257.二叉树的所有路径.md","contentType":"file"},{"name":"0279.完全平方数.md","path":"problems/0279.完全平方数.md","contentType":"file"},{"name":"0283.移动零.md","path":"problems/0283.移动零.md","contentType":"file"},{"name":"0300.最长上升子序列.md","path":"problems/0300.最长上升子序列.md","contentType":"file"},{"name":"0309.最佳买卖股票时机含冷冻期.md","path":"problems/0309.最佳买卖股票时机含冷冻期.md","contentType":"file"},{"name":"0322.零钱兑换.md","path":"problems/0322.零钱兑换.md","contentType":"file"},{"name":"0332.重新安排行程.md","path":"problems/0332.重新安排行程.md","contentType":"file"},{"name":"0337.打家劫舍III.md","path":"problems/0337.打家劫舍III.md","contentType":"file"},{"name":"0343.整数拆分.md","path":"problems/0343.整数拆分.md","contentType":"file"},{"name":"0344.反转字符串.md","path":"problems/0344.反转字符串.md","contentType":"file"},{"name":"0347.前K个高频元素.md","path":"problems/0347.前K个高频元素.md","contentType":"file"},{"name":"0349.两个数组的交集.md","path":"problems/0349.两个数组的交集.md","contentType":"file"},{"name":"0376.摆动序列.md","path":"problems/0376.摆动序列.md","contentType":"file"},{"name":"0377.组合总和Ⅳ.md","path":"problems/0377.组合总和Ⅳ.md","contentType":"file"},{"name":"0383.赎金信.md","path":"problems/0383.赎金信.md","contentType":"file"},{"name":"0392.判断子序列.md","path":"problems/0392.判断子序列.md","contentType":"file"},{"name":"0404.左叶子之和.md","path":"problems/0404.左叶子之和.md","contentType":"file"},{"name":"0406.根据身高重建队列.md","path":"problems/0406.根据身高重建队列.md","contentType":"file"},{"name":"0416.分割等和子集.md","path":"problems/0416.分割等和子集.md","contentType":"file"},{"name":"0417.太平洋大西洋水流问题.md","path":"problems/0417.太平洋大西洋水流问题.md","contentType":"file"},{"name":"0435.无重叠区间.md","path":"problems/0435.无重叠区间.md","contentType":"file"},{"name":"0450.删除二叉搜索树中的节点.md","path":"problems/0450.删除二叉搜索树中的节点.md","contentType":"file"},{"name":"0452.用最少数量的箭引爆气球.md","path":"problems/0452.用最少数量的箭引爆气球.md","contentType":"file"},{"name":"0454.四数相加II.md","path":"problems/0454.四数相加II.md","contentType":"file"},{"name":"0455.分发饼干.md","path":"problems/0455.分发饼干.md","contentType":"file"},{"name":"0459.重复的子字符串.md","path":"problems/0459.重复的子字符串.md","contentType":"file"},{"name":"0463.岛屿的周长.md","path":"problems/0463.岛屿的周长.md","contentType":"file"},{"name":"0474.一和零.md","path":"problems/0474.一和零.md","contentType":"file"},{"name":"0491.递增子序列.md","path":"problems/0491.递增子序列.md","contentType":"file"},{"name":"0494.目标和.md","path":"problems/0494.目标和.md","contentType":"file"},{"name":"0496.下一个更大元素I.md","path":"problems/0496.下一个更大元素I.md","contentType":"file"},{"name":"0501.二叉搜索树中的众数.md","path":"problems/0501.二叉搜索树中的众数.md","contentType":"file"},{"name":"0503.下一个更大元素II.md","path":"problems/0503.下一个更大元素II.md","contentType":"file"},{"name":"0509.斐波那契数.md","path":"problems/0509.斐波那契数.md","contentType":"file"},{"name":"0513.找树左下角的值.md","path":"problems/0513.找树左下角的值.md","contentType":"file"},{"name":"0516.最长回文子序列.md","path":"problems/0516.最长回文子序列.md","contentType":"file"},{"name":"0518.零钱兑换II.md","path":"problems/0518.零钱兑换II.md","contentType":"file"},{"name":"0530.二叉搜索树的最小绝对差.md","path":"problems/0530.二叉搜索树的最小绝对差.md","contentType":"file"},{"name":"0538.把二叉搜索树转换为累加树.md","path":"problems/0538.把二叉搜索树转换为累加树.md","contentType":"file"},{"name":"0541.反转字符串II.md","path":"problems/0541.反转字符串II.md","contentType":"file"},{"name":"0583.两个字符串的删除操作.md","path":"problems/0583.两个字符串的删除操作.md","contentType":"file"},{"name":"0617.合并二叉树.md","path":"problems/0617.合并二叉树.md","contentType":"file"},{"name":"0647.回文子串.md","path":"problems/0647.回文子串.md","contentType":"file"},{"name":"0649.Dota2参议院.md","path":"problems/0649.Dota2参议院.md","contentType":"file"},{"name":"0654.最大二叉树.md","path":"problems/0654.最大二叉树.md","contentType":"file"},{"name":"0657.机器人能否返回原点.md","path":"problems/0657.机器人能否返回原点.md","contentType":"file"},{"name":"0669.修剪二叉搜索树.md","path":"problems/0669.修剪二叉搜索树.md","contentType":"file"},{"name":"0673.最长递增子序列的个数.md","path":"problems/0673.最长递增子序列的个数.md","contentType":"file"},{"name":"0674.最长连续递增序列.md","path":"problems/0674.最长连续递增序列.md","contentType":"file"},{"name":"0684.冗余连接.md","path":"problems/0684.冗余连接.md","contentType":"file"},{"name":"0685.冗余连接II.md","path":"problems/0685.冗余连接II.md","contentType":"file"},{"name":"0695.岛屿的最大面积.md","path":"problems/0695.岛屿的最大面积.md","contentType":"file"},{"name":"0700.二叉搜索树中的搜索.md","path":"problems/0700.二叉搜索树中的搜索.md","contentType":"file"},{"name":"0701.二叉搜索树中的插入操作.md","path":"problems/0701.二叉搜索树中的插入操作.md","contentType":"file"},{"name":"0704.二分查找.md","path":"problems/0704.二分查找.md","contentType":"file"},{"name":"0707.设计链表.md","path":"problems/0707.设计链表.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费.md","path":"problems/0714.买卖股票的最佳时机含手续费.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费（动态规划）.md","path":"problems/0714.买卖股票的最佳时机含手续费（动态规划）.md","contentType":"file"},{"name":"0718.最长重复子数组.md","path":"problems/0718.最长重复子数组.md","contentType":"file"},{"name":"0724.寻找数组的中心索引.md","path":"problems/0724.寻找数组的中心索引.md","contentType":"file"},{"name":"0738.单调递增的数字.md","path":"problems/0738.单调递增的数字.md","contentType":"file"},{"name":"0739.每日温度.md","path":"problems/0739.每日温度.md","contentType":"file"},{"name":"0743.网络延迟时间.md","path":"problems/0743.网络延迟时间.md","contentType":"file"},{"name":"0746.使用最小花费爬楼梯.md","path":"problems/0746.使用最小花费爬楼梯.md","contentType":"file"},{"name":"0763.划分字母区间.md","path":"problems/0763.划分字母区间.md","contentType":"file"},{"name":"0787.K站中转内最便宜的航班.md","path":"problems/0787.K站中转内最便宜的航班.md","contentType":"file"},{"name":"0797.所有可能的路径.md","path":"problems/0797.所有可能的路径.md","contentType":"file"},{"name":"0827.最大人工岛.md","path":"problems/0827.最大人工岛.md","contentType":"file"},{"name":"0841.钥匙和房间.md","path":"problems/0841.钥匙和房间.md","contentType":"file"},{"name":"0844.比较含退格的字符串.md","path":"problems/0844.比较含退格的字符串.md","contentType":"file"},{"name":"0860.柠檬水找零.md","path":"problems/0860.柠檬水找零.md","contentType":"file"},{"name":"0922.按奇偶排序数组II.md","path":"problems/0922.按奇偶排序数组II.md","contentType":"file"},{"name":"0925.长按键入.md","path":"problems/0925.长按键入.md","contentType":"file"},{"name":"0941.有效的山脉数组.md","path":"problems/0941.有效的山脉数组.md","contentType":"file"},{"name":"0968.监控二叉树.md","path":"problems/0968.监控二叉树.md","contentType":"file"},{"name":"0977.有序数组的平方.md","path":"problems/0977.有序数组的平方.md","contentType":"file"},{"name":"1002.查找常用字符.md","path":"problems/1002.查找常用字符.md","contentType":"file"},{"name":"1005.K次取反后最大化的数组和.md","path":"problems/1005.K次取反后最大化的数组和.md","contentType":"file"},{"name":"1020.飞地的数量.md","path":"problems/1020.飞地的数量.md","contentType":"file"},{"name":"1035.不相交的线.md","path":"problems/1035.不相交的线.md","contentType":"file"},{"name":"1047.删除字符串中的所有相邻重复项.md","path":"problems/1047.删除字符串中的所有相邻重复项.md","contentType":"file"},{"name":"1049.最后一块石头的重量II.md","path":"problems/1049.最后一块石头的重量II.md","contentType":"file"},{"name":"1143.最长公共子序列.md","path":"problems/1143.最长公共子序列.md","contentType":"file"},{"name":"1207.独一无二的出现次数.md","path":"problems/1207.独一无二的出现次数.md","contentType":"file"},{"name":"1221.分割平衡字符串.md","path":"problems/1221.分割平衡字符串.md","contentType":"file"},{"name":"1254.统计封闭岛屿的数目.md","path":"problems/1254.统计封闭岛屿的数目.md","contentType":"file"},{"name":"1334.阈值距离内邻居最少的城市.md","path":"problems/1334.阈值距离内邻居最少的城市.md","contentType":"file"},{"name":"1356.根据数字二进制下1的数目排序.md","path":"problems/1356.根据数字二进制下1的数目排序.md","contentType":"file"},{"name":"1365.有多少小于当前数字的数字.md","path":"problems/1365.有多少小于当前数字的数字.md","contentType":"file"},{"name":"1382.将二叉搜索树变平衡.md","path":"problems/1382.将二叉搜索树变平衡.md","contentType":"file"},{"name":"1791.找出星型图的中心节点.md","path":"problems/1791.找出星型图的中心节点.md","contentType":"file"},{"name":"1971.寻找图中是否存在路径.md","path":"problems/1971.寻找图中是否存在路径.md","contentType":"file"},{"name":"O(n)的算法居然超时了，此时的n究竟是多大？.md","path":"problems/O(n)的算法居然超时了，此时的n究竟是多大？.md","contentType":"file"},{"name":"toolgithub.sh","path":"problems/toolgithub.sh","contentType":"file"},{"name":"为了绝杀编辑距离，卡尔做了三步铺垫.md","path":"problems/为了绝杀编辑距离，卡尔做了三步铺垫.md","contentType":"file"},{"name":"二叉树中递归带着回溯.md","path":"problems/二叉树中递归带着回溯.md","contentType":"file"},{"name":"二叉树总结篇.md","path":"problems/二叉树总结篇.md","contentType":"file"},{"name":"二叉树理论基础.md","path":"problems/二叉树理论基础.md","contentType":"file"},{"name":"二叉树的统一迭代法.md","path":"problems/二叉树的统一迭代法.md","contentType":"file"},{"name":"二叉树的迭代遍历.md","path":"problems/二叉树的迭代遍历.md","contentType":"file"},{"name":"二叉树的递归遍历.md","path":"problems/二叉树的递归遍历.md","contentType":"file"},{"name":"剑指Offer05.替换空格.md","path":"problems/剑指Offer05.替换空格.md","contentType":"file"},{"name":"剑指Offer58-II.左旋转字符串.md","path":"problems/剑指Offer58-II.左旋转字符串.md","contentType":"file"},{"name":"动态规划-股票问题总结篇.md","path":"problems/动态规划-股票问题总结篇.md","contentType":"file"},{"name":"动态规划总结篇.md","path":"problems/动态规划总结篇.md","contentType":"file"},{"name":"动态规划理论基础.md","path":"problems/动态规划理论基础.md","contentType":"file"},{"name":"双指针总结.md","path":"problems/双指针总结.md","contentType":"file"},{"name":"哈希表总结.md","path":"problems/哈希表总结.md","contentType":"file"},{"name":"哈希表理论基础.md","path":"problems/哈希表理论基础.md","contentType":"file"},{"name":"回溯总结.md","path":"problems/回溯总结.md","contentType":"file"},{"name":"回溯算法去重问题的另一种写法.md","path":"problems/回溯算法去重问题的另一种写法.md","contentType":"file"},{"name":"回溯算法理论基础.md","path":"problems/回溯算法理论基础.md","contentType":"file"},{"name":"图论并查集理论基础.md","path":"problems/图论并查集理论基础.md","contentType":"file"},{"name":"图论广搜理论基础.md","path":"problems/图论广搜理论基础.md","contentType":"file"},{"name":"图论深搜理论基础.md","path":"problems/图论深搜理论基础.md","contentType":"file"},{"name":"字符串总结.md","path":"problems/字符串总结.md","contentType":"file"},{"name":"数组总结篇.md","path":"problems/数组总结篇.md","contentType":"file"},{"name":"数组理论基础.md","path":"problems/数组理论基础.md","contentType":"file"},{"name":"栈与队列总结.md","path":"problems/栈与队列总结.md","contentType":"file"},{"name":"栈与队列理论基础.md","path":"problems/栈与队列理论基础.md","contentType":"file"},{"name":"根据身高重建队列（vector原理讲解）.md","path":"problems/根据身高重建队列（vector原理讲解）.md","contentType":"file"},{"name":"算法模板.md","path":"problems/算法模板.md","contentType":"file"},{"name":"背包总结篇.md","path":"problems/背包总结篇.md","contentType":"file"},{"name":"背包理论基础01背包-1.md","path":"problems/背包理论基础01背包-1.md","contentType":"file"},{"name":"背包理论基础01背包-2.md","path":"problems/背包理论基础01背包-2.md","contentType":"file"},{"name":"背包问题理论基础多重背包.md","path":"problems/背包问题理论基础多重背包.md","contentType":"file"},{"name":"背包问题理论基础完全背包.md","path":"problems/背包问题理论基础完全背包.md","contentType":"file"},{"name":"贪心算法总结篇.md","path":"problems/贪心算法总结篇.md","contentType":"file"},{"name":"贪心算法理论基础.md","path":"problems/贪心算法理论基础.md","contentType":"file"},{"name":"链表总结篇.md","path":"problems/链表总结篇.md","contentType":"file"},{"name":"链表理论基础.md","path":"problems/链表理论基础.md","contentType":"file"},{"name":"面试题02.07.链表相交.md","path":"problems/面试题02.07.链表相交.md","contentType":"file"}],"totalCount":228},"":{"items":[{"name":"pics","path":"pics","contentType":"directory"},{"name":"problems","path":"problems","contentType":"directory"},{"name":"README.md","path":"README.md","contentType":"file"}],"totalCount":3}},"fileTreeProcessingTime":23.425518,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"refType":"branch","currentOid":"b07e850a199dae1777d8831e9e811d87725396b4","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"problems/0239.滑动窗口最大值.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/feinan/leetcode-master/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"0239.滑动窗口最大值.md","displayUrl":"https://github.com/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md?raw=true","headerInfo":{"blobSize":"27.8 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"23bf615","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0239.%25E6%25BB%2591%25E5%258A%25A8%25E7%25AA%2597%25E5%258F%25A3%25E6%259C%2580%25E5%25A4%25A7%25E5%2580%25BC.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"867","truncatedSloc":"731"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/feinan/leetcode-master/blob/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/feinan/leetcode-master/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["\u003cp align=\"center\"\u003e","\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/训练营.png\" width=\"1000\"/\u003e","\u003c/a\u003e","\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003ca href=\"./qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e","","","","\u003e 要用啥数据结构呢？","","# 239. 滑动窗口最大值","","[力扣题目链接](https://leetcode.cn/problems/sliding-window-maximum/)","","给定一个数组 nums，有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。","","返回滑动窗口中的最大值。","","进阶：","","你能在线性时间复杂度内解决此题吗？","","\u003cimg src='https://code-thinking.cdn.bcebos.com/pics/239.滑动窗口最大值.png' width=600\u003e \u003c/img\u003e\u003c/div\u003e","","提示：","","* 1 \u003c= nums.length \u003c= 10^5","* -10^4 \u003c= nums[i] \u003c= 10^4","* 1 \u003c= k \u003c= nums.length","","## 算法公开课","","**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)：[单调队列正式登场！| LeetCode：239. 滑动窗口最大值](https://www.bilibili.com/video/BV1XS4y1p7qj)，相信结合视频再看本篇题解，更有助于大家对本题的理解**。","","## 思路","","这是使用单调队列的经典题目。","","难点是如何求一个区间里的最大值呢？ （这好像是废话），暴力一下不就得了。","","暴力方法，遍历一遍的过程中每次从窗口中再找到最大的数值，这样很明显是O(n × k)的算法。","","有的同学可能会想用一个大顶堆（优先级队列）来存放这个窗口里的k个数字，这样就可以知道最大的最大值是多少了， **但是问题是这个窗口是移动的，而大顶堆每次只能弹出最大值，我们无法移除其他数值，这样就造成大顶堆维护的不是滑动窗口里面的数值了。所以不能用大顶堆。**","","此时我们需要一个队列，这个队列呢，放进去窗口里的元素，然后随着窗口的移动，队列也一进一出，每次移动之后，队列告诉我们里面的最大值是什么。","","","这个队列应该长这个样子：","","```cpp","class MyQueue {","public:","    void pop(int value) {","    }","    void push(int value) {","    }","    int front() {","        return que.front();","    }","};","```","","每次窗口移动的时候，调用que.pop(滑动窗口中移除元素的数值)，que.push(滑动窗口添加元素的数值)，然后que.front()就返回我们要的最大值。","","这么个队列香不香，要是有现成的这种数据结构是不是更香了！ ","","其实在C++中，可以使用 multiset 来模拟这个过程，文末提供这个解法仅针对C++，以下讲解我们还是靠自己来实现这个单调队列。","","然后再分析一下，队列里的元素一定是要排序的，而且要最大值放在出队口，要不然怎么知道最大值呢。","","但如果把窗口里的元素都放进队列里，窗口移动的时候，队列需要弹出元素。","","那么问题来了，已经排序之后的队列 怎么能把窗口要移除的元素（这个元素可不一定是最大值）弹出呢。","","大家此时应该陷入深思.....","","**其实队列没有必要维护窗口里的所有元素，只需要维护有可能成为窗口里最大值的元素就可以了，同时保证队列里的元素数值是由大到小的。**","","那么这个维护元素单调递减的队列就叫做**单调队列，即单调递减或单调递增的队列。C++中没有直接支持单调队列，需要我们自己来实现一个单调队列**","","**不要以为实现的单调队列就是 对窗口里面的数进行排序，如果排序的话，那和优先级队列又有什么区别了呢。**","","来看一下单调队列如何维护队列里的元素。","","动画如下：","","![239.滑动窗口最大值](https://code-thinking.cdn.bcebos.com/gifs/239.滑动窗口最大值.gif)","","对于窗口里的元素{2, 3, 5, 1 ,4}，单调队列里只维护{5, 4} 就够了，保持单调队列里单调递减，此时队列出口元素就是窗口里最大元素。","","此时大家应该怀疑单调队列里维护着{5, 4} 怎么配合窗口进行滑动呢？","","设计单调队列的时候，pop，和push操作要保持如下规则：","","1. pop(value)：如果窗口移除的元素value等于单调队列的出口元素，那么队列弹出元素，否则不用任何操作","2. push(value)：如果push的元素value大于入口元素的数值，那么就将队列入口的元素弹出，直到push元素的数值小于等于队列入口元素的数值为止","","保持如上规则，每次窗口移动的时候，只要问que.front()就可以返回当前窗口的最大值。","","为了更直观的感受到单调队列的工作过程，以题目示例为例，输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3，动画如下：","","","![239.滑动窗口最大值-2](https://code-thinking.cdn.bcebos.com/gifs/239.滑动窗口最大值-2.gif)","","那么我们用什么数据结构来实现这个单调队列呢？","","使用deque最为合适，在文章[栈与队列：来看看栈和队列不为人知的一面](https://programmercarl.com/栈与队列理论基础.html)中，我们就提到了常用的queue在没有指定容器的情况下，deque就是默认底层容器。","","基于刚刚说过的单调队列pop和push的规则，代码不难实现，如下：","","```CPP","class MyQueue { //单调队列（从大到小）","public:","    deque\u003cint\u003e que; // 使用deque来实现单调队列","    // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。","    // 同时pop之前判断队列当前是否为空。","    void pop(int value) {","        if (!que.empty() \u0026\u0026 value == que.front()) {","            que.pop_front();","        }","    }","    // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。","    // 这样就保持了队列里的数值是单调从大到小的了。","    void push(int value) {","        while (!que.empty() \u0026\u0026 value \u003e que.back()) {","            que.pop_back();","        }","        que.push_back(value);","","    }","    // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。","    int front() {","        return que.front();","    }","};","```","","","这样我们就用deque实现了一个单调队列，接下来解决滑动窗口最大值的问题就很简单了，直接看代码吧。","","C++代码如下：","","```CPP","class Solution {","private:","    class MyQueue { //单调队列（从大到小）","    public:","        deque\u003cint\u003e que; // 使用deque来实现单调队列","        // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。","        // 同时pop之前判断队列当前是否为空。","        void pop(int value) {","            if (!que.empty() \u0026\u0026 value == que.front()) {","                que.pop_front();","            }","        }","        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。","        // 这样就保持了队列里的数值是单调从大到小的了。","        void push(int value) {","            while (!que.empty() \u0026\u0026 value \u003e que.back()) {","                que.pop_back();","            }","            que.push_back(value);","","        }","        // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。","        int front() {","            return que.front();","        }","    };","public:","    vector\u003cint\u003e maxSlidingWindow(vector\u003cint\u003e\u0026 nums, int k) {","        MyQueue que;","        vector\u003cint\u003e result;","        for (int i = 0; i \u003c k; i++) { // 先将前k的元素放进队列","            que.push(nums[i]);","        }","        result.push_back(que.front()); // result 记录前k的元素的最大值","        for (int i = k; i \u003c nums.size(); i++) {","            que.pop(nums[i - k]); // 滑动窗口移除最前面元素","            que.push(nums[i]); // 滑动窗口前加入最后面的元素","            result.push_back(que.front()); // 记录对应的最大值","        }","        return result;","    }","};","```","* 时间复杂度: O(n)","* 空间复杂度: O(k)","","","再来看一下时间复杂度，使用单调队列的时间复杂度是 O(n)。","","有的同学可能想了，在队列中 push元素的过程中，还有pop操作呢，感觉不是纯粹的O(n)。","","其实，大家可以自己观察一下单调队列的实现，nums 中的每个元素最多也就被 push_back 和 pop_back 各一次，没有任何多余操作，所以整体的复杂度还是 O(n)。","","空间复杂度因为我们定义一个辅助队列，所以是O(k)。","","## 扩展","","大家貌似对单调队列 都有一些疑惑，首先要明确的是，题解中单调队列里的pop和push接口，仅适用于本题哈。单调队列不是一成不变的，而是不同场景不同写法，总之要保证队列里单调递减或递增的原则，所以叫做单调队列。 不要以为本题中的单调队列实现就是固定的写法哈。","","大家貌似对deque也有一些疑惑，C++中deque是stack和queue默认的底层实现容器（这个我们之前已经讲过啦），deque是可以两边扩展的，而且deque里元素并不是严格的连续分布的。","","","","## 其他语言版本","","### Java：","","```Java","//解法一","//自定义数组","class MyQueue {","    Deque\u003cInteger\u003e deque = new LinkedList\u003c\u003e();","    //弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出","    //同时判断队列当前是否为空","    void poll(int val) {","        if (!deque.isEmpty() \u0026\u0026 val == deque.peek()) {","            deque.poll();","        }","    }","    //添加元素时，如果要添加的元素大于入口处的元素，就将入口元素弹出","    //保证队列元素单调递减","    //比如此时队列元素3,1，2将要入队，比1大，所以1弹出，此时队列：3,2","    void add(int val) {","        while (!deque.isEmpty() \u0026\u0026 val \u003e deque.getLast()) {","            deque.removeLast();","        }","        deque.add(val);","    }","    //队列队顶元素始终为最大值","    int peek() {","        return deque.peek();","    }","}","","class Solution {","    public int[] maxSlidingWindow(int[] nums, int k) {","        if (nums.length == 1) {","            return nums;","        }","        int len = nums.length - k + 1;","        //存放结果元素的数组","        int[] res = new int[len];","        int num = 0;","        //自定义队列","        MyQueue myQueue = new MyQueue();","        //先将前k的元素放入队列","        for (int i = 0; i \u003c k; i++) {","            myQueue.add(nums[i]);","        }","        res[num++] = myQueue.peek();","        for (int i = k; i \u003c nums.length; i++) {","            //滑动窗口移除最前面的元素，移除是判断该元素是否放入队列","            myQueue.poll(nums[i - k]);","            //滑动窗口加入最后面的元素","            myQueue.add(nums[i]);","            //记录对应的最大值","            res[num++] = myQueue.peek();","        }","        return res;","    }","}","","//解法二","//利用双端队列手动实现单调队列","/**"," * 用一个单调队列来存储对应的下标，每当窗口滑动的时候，直接取队列的头部指针对应的值放入结果集即可"," * 单调队列类似 （tail --\u003e） 3 --\u003e 2 --\u003e 1 --\u003e 0 (--\u003e head) (右边为头结点，元素存的是下标)"," */","class Solution {","    public int[] maxSlidingWindow(int[] nums, int k) {","        ArrayDeque\u003cInteger\u003e deque = new ArrayDeque\u003c\u003e();","        int n = nums.length;","        int[] res = new int[n - k + 1];","        int idx = 0;","        for(int i = 0; i \u003c n; i++) {","            // 根据题意，i为nums下标，是要在[i - k + 1, i] 中选到最大值，只需要保证两点","            // 1.队列头结点需要在[i - k + 1, i]范围内，不符合则要弹出","            while(!deque.isEmpty() \u0026\u0026 deque.peek() \u003c i - k + 1){","                deque.poll();","            }","            // 2.既然是单调，就要保证每次放进去的数字要比末尾的都大，否则也弹出","            while(!deque.isEmpty() \u0026\u0026 nums[deque.peekLast()] \u003c nums[i]) {","                deque.pollLast();","            }","","            deque.offer(i);","","            // 因为单调，当i增长到符合第一个k范围的时候，每滑动一步都将队列头节点放入结果就行了","            if(i \u003e= k - 1){","                res[idx++] = nums[deque.peek()];","            }","        }","        return res;","    }","}","```","","### Python：","","```python","from collections import deque","","","class MyQueue: #单调队列（从大到小","    def __init__(self):","        self.queue = deque() #这里需要使用deque实现单调队列，直接使用list会超时","    ","    #每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。","    #同时pop之前判断队列当前是否为空。","    def pop(self, value):","        if self.queue and value == self.queue[0]:","            self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()","            ","    #如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。","    #这样就保持了队列里的数值是单调从大到小的了。","    def push(self, value):","        while self.queue and value \u003e self.queue[-1]:","            self.queue.pop()","        self.queue.append(value)","        ","    #查询当前队列里的最大值 直接返回队列前端也就是front就可以了。","    def front(self):","        return self.queue[0]","    ","class Solution:","    def maxSlidingWindow(self, nums: List[int], k: int) -\u003e List[int]:","        que = MyQueue()","        result = []","        for i in range(k): #先将前k的元素放进队列","            que.push(nums[i])","        result.append(que.front()) #result 记录前k的元素的最大值","        for i in range(k, len(nums)):","            que.pop(nums[i - k]) #滑动窗口移除最前面元素","            que.push(nums[i]) #滑动窗口前加入最后面的元素","            result.append(que.front()) #记录对应的最大值","        return result","```","","### Go：","","```go","// 封装单调队列的方式解题","type MyQueue struct {","    queue []int","}","","func NewMyQueue() *MyQueue {","    return \u0026MyQueue{","        queue: make([]int, 0),","    }","}","","func (m *MyQueue) Front() int {","    return m.queue[0]","}","","func (m *MyQueue) Back() int {","    return m.queue[len(m.queue)-1]","}","","func (m *MyQueue) Empty() bool {","    return len(m.queue) == 0","}","","func (m *MyQueue) Push(val int) {","    for !m.Empty() \u0026\u0026 val \u003e m.Back() {","        m.queue = m.queue[:len(m.queue)-1]","    }","    m.queue = append(m.queue, val)","}","","func (m *MyQueue) Pop(val int) {","    if !m.Empty() \u0026\u0026 val == m.Front() {","        m.queue = m.queue[1:]","    }","}","","func maxSlidingWindow(nums []int, k int) []int {","    queue := NewMyQueue()","    length := len(nums)","    res := make([]int, 0)","    // 先将前k个元素放入队列","    for i := 0; i \u003c k; i++ {","        queue.Push(nums[i])","    }","    // 记录前k个元素的最大值","    res = append(res, queue.Front())","","    for i := k; i \u003c length; i++ {","        // 滑动窗口移除最前面的元素","        queue.Pop(nums[i-k])","        // 滑动窗口添加最后面的元素","        queue.Push(nums[i])","        // 记录最大值","        res = append(res, queue.Front())","    }","    return res","}","```","","### Javascript:","","```javascript","/**"," * @param {number[]} nums"," * @param {number} k"," * @return {number[]}"," */","var maxSlidingWindow = function (nums, k) {","    class MonoQueue {","        queue;","        constructor() {","            this.queue = [];","        }","        enqueue(value) {","            let back = this.queue[this.queue.length - 1];","            while (back !== undefined \u0026\u0026 back \u003c value) {","                this.queue.pop();","                back = this.queue[this.queue.length - 1];","            }","            this.queue.push(value);","        }","        dequeue(value) {","            let front = this.front();","            if (front === value) {","                this.queue.shift();","            }","        }","        front() {","            return this.queue[0];","        }","    }","    let helperQueue = new MonoQueue();","    let i = 0, j = 0;","    let resArr = [];","    while (j \u003c k) {","        helperQueue.enqueue(nums[j++]);","    }","    resArr.push(helperQueue.front());","    while (j \u003c nums.length) {","        helperQueue.enqueue(nums[j]);","        helperQueue.dequeue(nums[i]);","        resArr.push(helperQueue.front());","        i++, j++;","    }","    return resArr;","};","```","","### TypeScript：","","```typescript","function maxSlidingWindow(nums: number[], k: number): number[] {","    /** 单调递减队列 */","    class MonoQueue {","        private queue: number[];","        constructor() {","            this.queue = [];","        };","        /** 入队：value如果大于队尾元素，则将队尾元素删除，直至队尾元素大于value，或者队列为空 */","        public enqueue(value: number): void {","            let back: number | undefined = this.queue[this.queue.length - 1];","            while (back !== undefined \u0026\u0026 back \u003c value) {","                this.queue.pop();","                back = this.queue[this.queue.length - 1];","            }","            this.queue.push(value);","        };","        /** 出队：只有当队头元素等于value，才出队 */","        public dequeue(value: number): void {","            let top: number | undefined = this.top();","            if (top !== undefined \u0026\u0026 top === value) {","                this.queue.shift();","            }","        }","        public top(): number | undefined {","            return this.queue[0];","        }","    }","    const helperQueue: MonoQueue = new MonoQueue();","    let i: number = 0,","        j: number = 0;","    let resArr: number[] = [];","    while (j \u003c k) {","        helperQueue.enqueue(nums[j++]);","    }","    resArr.push(helperQueue.top()!);","    while (j \u003c nums.length) {","        helperQueue.enqueue(nums[j]);","        helperQueue.dequeue(nums[i]);","        resArr.push(helperQueue.top()!);","        j++, i++;","    }","    return resArr;","};","```","","### Swift:","","解法一:","","```Swift","/// 双向链表","class DoublyListNode {","    var head: DoublyListNode?","    var tail: DoublyListNode?","    var next: DoublyListNode?","    var pre: DoublyListNode?","    var value: Int = 0","    init(_ value: Int = 0) {","        self.value = value","    }","    func isEmpty() -\u003e Bool {","        return self.head == nil","    }","    func first() -\u003e Int? {","        return self.head?.value","    }","    func last() -\u003e Int? {","        return self.tail?.value","    }","    func removeFirst() {","        if isEmpty() {","            return","        }","        let next = self.head!.next","        self.head?.next = nil// 移除首节点","        next?.pre = nil","        self.head = next","    }","    func removeLast() {","        if let tail = self.tail {","            if let pre = tail.pre {","                self.tail?.pre = nil","                pre.next = nil","                self.tail = pre","            } else {","                self.head = nil","                self.tail = nil","            }","        }","    }","    func append(_ value: Int) {","        let node = DoublyListNode(value)","        if self.head != nil {","            node.pre = self.tail","            self.tail?.next = node","            self.tail = node","        } else {","            self.head = node","            self.tail = node","            self.pre = nil","            self.next = nil","        }","    }","}","// 单调队列, 从大到小","class MyQueue {","//    var queue: [Int]!// 用数组会超时","    var queue: DoublyListNode!","    init() {","//        queue = [Int]()","        queue = DoublyListNode()","    }","    // 滑动窗口时弹出第一个元素, 如果相等再弹出","    func pop(x: Int) {","        if !queue.isEmpty() \u0026\u0026 front() == x {","            queue.removeFirst()","        }","    }","    // 滑动窗口时添加下一个元素, 移除队尾比 x 小的元素 始终保证队头 \u003e 队尾","    func push(x: Int) {","        while !queue.isEmpty() \u0026\u0026 queue.last()! \u003c x {","            queue.removeLast()","        }","        queue.append(x)","    }","    // 此时队头就是滑动窗口最大值","    func front() -\u003e Int {","        return queue.first() ?? -1","    }","}","","class Solution {","    func maxSlidingWindow(_ nums: [Int], _ k: Int) -\u003e [Int] {","        // 存放结果","        var res = [Int]()","        let queue = MyQueue()","        // 先将前K个元素放入队列","        for i in 0 ..\u003c k {","            queue.push(x: nums[i])","        }","        // 添加当前队列最大值到结果数组","        res.append(queue.front())","        for i in k ..\u003c nums.count {","            // 滑动窗口移除最前面元素","            queue.pop(x: nums[i - k])","            // 滑动窗口添加下一个元素","            queue.push(x: nums[i])","            // 保存当前队列最大值","            res.append(queue.front())","        }","        return res","    }","}","```","","Swift解法二：","","```swift","func maxSlidingWindow(_ nums: [Int], _ k: Int) -\u003e [Int] {","    var result = [Int]()","    var window = [Int]()","    var right = 0, left = right - k + 1","","    while right \u003c nums.count {","        let value = nums[right]","","        // 因为窗口移动丢弃的左边数","        if left \u003e 0, left - 1 == window.first {","            window.removeFirst()","        }","","        // 保证末尾的是最大的","        while !window.isEmpty, value \u003e nums[window.last!] {","            window.removeLast()","        }","        window.append(right)","","        if left \u003e= 0 { // 窗口形成","            result.append(nums[window.first!])","        }","","        right += 1","        left += 1","    }","","    return result","}","```","### Scala:","","```scala","import scala.collection.mutable.ArrayBuffer","object Solution {","  def maxSlidingWindow(nums: Array[Int], k: Int): Array[Int] = {","    var len = nums.length - k + 1   // 滑动窗口长度","    var res: Array[Int] = new Array[Int](len)   // 声明存储结果的数组","    var index = 0   // 结果数组指针","    val queue: MyQueue = new MyQueue    // 自定义队列","    // 将前k个添加到queue","    for (i \u003c- 0 until k) {","      queue.add(nums(i))","    }","    res(index) = queue.peek // 第一个滑动窗口的最大值","    index += 1","    for (i \u003c- k until nums.length) {","      queue.poll(nums(i - k))   // 首先移除第i-k个元素","      queue.add(nums(i))        // 添加当前数字到队列","      res(index) = queue.peek() // 赋值","      index+=1","    }","    // 最终返回res，return关键字可以省略","    res","  }"," }","","class MyQueue {","  var queue = ArrayBuffer[Int]()","","  // 移除元素，如果传递进来的跟队头相等，那么移除","  def poll(value: Int): Unit = {","    if (!queue.isEmpty \u0026\u0026 queue.head == value) {","      queue.remove(0)","    }","  }","","  // 添加元素，当队尾大于当前元素就删除","  def add(value: Int): Unit = {","    while (!queue.isEmpty \u0026\u0026 value \u003e queue.last) {","      queue.remove(queue.length - 1)","    }","    queue.append(value)","  }","","  def peek(): Int = queue.head","}","```","","### PHP:","","```php","class Solution {","    /**","     * @param Integer[] $nums","     * @param Integer $k","     * @return Integer[]","     */","    function maxSlidingWindow($nums, $k) {","        $myQueue = new MyQueue();","        // 先将前k的元素放进队列","        for ($i = 0; $i \u003c $k; $i++) { ","            $myQueue-\u003epush($nums[$i]);","        }","","        $result = [];","        $result[] = $myQueue-\u003emax(); // result 记录前k的元素的最大值","","        for ($i = $k; $i \u003c count($nums); $i++) {","            $myQueue-\u003epop($nums[$i - $k]); // 滑动窗口移除最前面元素","            $myQueue-\u003epush($nums[$i]); // 滑动窗口前加入最后面的元素","            $result[]= $myQueue-\u003emax(); // 记录对应的最大值","        }","        return $result;","    }","","}","","// 单调对列构建","class MyQueue{","    private $queue;","","    public function __construct(){","        $this-\u003equeue = new SplQueue(); //底层是双向链表实现。","    }","","    public function pop($v){","        // 判断当前对列是否为空","        // 比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。","        // bottom 从链表前端查看元素, dequeue 从双向链表的开头移动一个节点","        if(!$this-\u003equeue-\u003eisEmpty() \u0026\u0026 $v == $this-\u003equeue-\u003ebottom()){","            $this-\u003equeue-\u003edequeue(); //弹出队列","        }","    }","","    public function push($v){","        // 判断当前对列是否为空","        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。","        // 这样就保持了队列里的数值是单调从大到小的了。","        while (!$this-\u003equeue-\u003eisEmpty() \u0026\u0026 $v \u003e $this-\u003equeue-\u003etop()) {","            $this-\u003equeue-\u003epop(); // pop从链表末尾弹出一个元素，","        }","        $this-\u003equeue-\u003eenqueue($v);","    }","","    // 查询当前队列里的最大值 直接返回队首","    public function max(){","        // bottom 从链表前端查看元素, top从链表末尾查看元素","        return $this-\u003equeue-\u003ebottom(); ","    }","","    // 辅助理解: 打印队列元素","    public function println(){","        // \"迭代器移动到链表头部\": 可理解为从头遍历链表元素做准备。","        // 【PHP中没有指针概念，所以就没说指针。从数据结构上理解，就是把指针指向链表头部】","        $this-\u003equeue-\u003erewind();","","        echo \"Println: \";","        while($this-\u003equeue-\u003evalid()){","            echo $this-\u003equeue-\u003ecurrent(),\" -\u003e \";","            $this-\u003equeue-\u003enext();","        }","        echo \"\\n\";","    } ","}","```","","### C#:","","```csharp","class myDequeue{","        private LinkedList\u003cint\u003e linkedList = new LinkedList\u003cint\u003e();","","        public void Enqueue(int n){","            while(linkedList.Count \u003e 0 \u0026\u0026 linkedList.Last.Value \u003c n){","                linkedList.RemoveLast();","            }","            linkedList.AddLast(n);","        }","","        public int Max(){","            return linkedList.First.Value;","        }","","        public void Dequeue(int n){","            if(linkedList.First.Value == n){","                linkedList.RemoveFirst();","            }   ","        }","    }","","    myDequeue window = new myDequeue();","    List\u003cint\u003e res = new List\u003cint\u003e();","","    public int[] MaxSlidingWindow(int[] nums, int k) {","        for(int i = 0; i \u003c k; i++){","            window.Enqueue(nums[i]);","        }","        res.Add(window.Max());","        for(int i = k; i \u003c nums.Length; i++){","            window.Dequeue(nums[i-k]);","            window.Enqueue(nums[i]);","            res.Add(window.Max());","        }","","        return res.ToArray();","    }","```","","### Rust:","","```rust","impl Solution {","    pub fn max_sliding_window(nums: Vec\u003ci32\u003e, k: i32) -\u003e Vec\u003ci32\u003e {","        let mut res = vec![];","        let mut queue = VecDeque::with_capacity(k as usize);","        for (i, \u0026v) in nums.iter().enumerate() {","            // 如果队列长度超过 k，那么需要移除队首过期元素","            if i - queue.front().unwrap_or(\u00260) == k as usize {","                queue.pop_front();","            }","            while let Some(\u0026index) = queue.back() {","                if nums[index] \u003e= v {","                    break;","                }","                // 如果队列第一个元素比当前元素小，那么就把队列第一个元素弹出","                queue.pop_back();","            }","            queue.push_back(i);","            if i \u003e= k as usize - 1 {","                res.push(nums[queue[0]]);","            }","        }","        res","    }","}","```","","### C++","使用multiset作为单调队列","","多重集合(`multiset`) 用以有序地存储元素的容器。允许存在相等的元素。","","在遍历原数组的时候，只需要把窗口的头元素加入到multiset中，然后把窗口的尾元素删除即可。因为multiset是有序的，并且提供了*rbegin()，可以直接获取窗口最大值。","```cpp","class Solution {","public:","    vector\u003cint\u003e maxSlidingWindow(vector\u003cint\u003e\u0026 nums, int k) {","        multiset\u003cint\u003e st;","        vector\u003cint\u003e ans;","        for (int i = 0; i \u003c nums.size(); i++) {","            if (i \u003e= k) st.erase(st.find(nums[i - k]));","            st.insert(nums[i]);","            if (i \u003e= k - 1) ans.push_back(*st.rbegin());","        }","        return ans;","    }","};","```","","\u003cp align=\"center\"\u003e","\u003ca href=\"https://programmercarl.com/other/kstar.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/网站星球宣传海报.jpg\" width=\"1000\"/\u003e","\u003c/a\u003e"],"stylingDirectives":[[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"]],[[1,2,"pl-ent"],[3,7,"pl-e"],[8,9,"pl-s"],[9,64,"pl-s"],[64,65,"pl-s"],[66,72,"pl-e"],[73,74,"pl-s"],[74,80,"pl-s"],[80,81,"pl-s"]],[[3,6,"pl-ent"],[7,10,"pl-e"],[11,12,"pl-s"],[12,27,"pl-s"],[27,28,"pl-s"],[29,34,"pl-e"],[35,36,"pl-s"],[36,40,"pl-s"],[40,41,"pl-s"]],[[2,3,"pl-ent"]],[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"],[19,25,"pl-ent"],[27,28,"pl-ent"],[29,33,"pl-e"],[34,35,"pl-s"],[35,49,"pl-s"],[49,50,"pl-s"],[58,59,"pl-ent"],[95,101,"pl-ent"],[104,105,"pl-ent"]],[],[],[],[[0,11,"pl-ent"],[0,2,"pl-ent"]],[[0,0,"pl-ent"]],[[0,14,"pl-mh"],[2,14,"pl-en"]],[],[[0,1,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,61,"pl-corl"],[61,62,"pl-s"]],[],[],[],[],[],[],[],[],[],[[1,4,"pl-ent"],[5,8,"pl-e"],[9,10,"pl-s"],[10,67,"pl-s"],[67,68,"pl-s"],[69,74,"pl-e"],[75,78,"pl-s"],[82,85,"pl-ent"],[88,91,"pl-ent"]],[],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[15,16,"pl-s"],[17,18,"pl-s"]],[[0,1,"pl-v"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[17,18,"pl-s"],[18,19,"pl-s"],[19,66,"pl-corl"],[66,67,"pl-s"],[68,69,"pl-s"],[101,102,"pl-s"],[102,103,"pl-s"],[103,146,"pl-corl"],[146,147,"pl-s"],[173,175,"pl-s"]],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[],[],[],[],[[54,56,"pl-s"],[128,130,"pl-s"]],[],[],[],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,13,"pl-en"]],[],[],[],[],[],[],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,80,"pl-c1"]],[[0,0,"pl-c1"]],[[0,29,"pl-c1"]],[[0,0,"pl-c1"]],[[0,66,"pl-c1"]],[[0,0,"pl-c1"]],[[0,46,"pl-c1"]],[[0,0,"pl-c1"]],[[0,34,"pl-c1"]],[[0,0,"pl-c1"]],[[0,47,"pl-c1"]],[[0,0,"pl-c1"]],[[0,15,"pl-c1"]],[[0,0,"pl-c1"]],[[0,66,"pl-c1"]],[[0,0,"pl-c1"]],[[0,71,"pl-c1"]],[[0,0,"pl-c1"]],[[0,53,"pl-c1"]],[[0,0,"pl-c1"]],[[0,19,"pl-c1"]],[[0,0,"pl-c1"]],[[0,5,"pl-c1"]],[[0,0,"pl-c1"]],[[0,73,"pl-c1"]],[[0,0,"pl-c1"]],[[0,73,"pl-c1"]],[[0,0,"pl-c1"]],[[0,35,"pl-c1"]],[[0,0,"pl-c1"]],[[0,29,"pl-c1"]],[[0,0,"pl-c1"]],[[0,57,"pl-c1"]],[[0,79,"pl-c1"]],[[0,0,"pl-c1"]],[[0,45,"pl-c1"]],[[0,0,"pl-c1"]],[[0,72,"pl-c1"]],[[0,0,"pl-c1"]],[[0,0,"pl-c1"]],[[0,77,"pl-c1"]],[[0,0,"pl-c1"]],[[0,22,"pl-c1"]],[[0,0,"pl-c1"]],[[0,120,"pl-c1"]],[[0,0,"pl-c1"]],[[0,33,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,28,"pl-c1"]],[[0,7,"pl-c1"]],[[0,37,"pl-c1"]],[[0,47,"pl-c1"]],[[0,25,"pl-c1"]],[[0,25,"pl-c1"]],[[0,51,"pl-c1"]],[[0,28,"pl-c1"]],[[0,9,"pl-c1"]],[[0,5,"pl-c1"]],[[0,65,"pl-c1"]],[[0,29,"pl-c1"]],[[0,26,"pl-c1"]],[[0,52,"pl-c1"]],[[0,27,"pl-c1"]],[[0,9,"pl-c1"]],[[0,29,"pl-c1"]],[[0,0,"pl-c1"]],[[0,5,"pl-c1"]],[[0,40,"pl-c1"]],[[0,17,"pl-c1"]],[[0,27,"pl-c1"]],[[0,5,"pl-c1"]],[[0,2,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[],[],[],[[14,17,"pl-ent"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[4,9,"pl-c1"]],[[8,44,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[12,17,"pl-en"]],[[4,31,"pl-c1"]],[[4,9,"pl-c1"]],[[4,6,"pl-c1"]],[],[[11,14,"pl-ent"],[40,43,"pl-ent"]],[],[[15,18,"pl-ent"]],[],[[25,26,"pl-s"],[27,28,"pl-s"]],[],[],[],[[24,25,"pl-s"],[30,31,"pl-s"]],[[25,26,"pl-s"],[27,28,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[],[],[],[],[],[],[],[],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[],[],[],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,5,"pl-c"],[0,2,"pl-c"]],[[0,7,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,13,"pl-en"]],[[4,18,"pl-k"],[10,17,"pl-smi"],[25,26,"pl-k"],[27,30,"pl-k"],[31,43,"pl-k"]],[[4,41,"pl-c"],[4,6,"pl-c"]],[[4,18,"pl-c"],[4,6,"pl-c"]],[[4,8,"pl-k"],[9,13,"pl-en"],[14,17,"pl-k"],[18,21,"pl-v"]],[[8,10,"pl-k"],[12,13,"pl-k"],[18,19,"pl-k"],[29,31,"pl-k"],[36,38,"pl-k"],[44,45,"pl-k"]],[[17,18,"pl-k"]],[],[],[[4,37,"pl-c"],[4,6,"pl-c"]],[[4,16,"pl-c"],[4,6,"pl-c"]],[[4,42,"pl-c"],[4,6,"pl-c"]],[[4,8,"pl-k"],[9,12,"pl-en"],[13,16,"pl-k"],[17,20,"pl-v"]],[[8,13,"pl-k"],[15,16,"pl-k"],[21,22,"pl-k"],[32,34,"pl-k"],[39,40,"pl-k"],[46,47,"pl-k"]],[[17,18,"pl-k"]],[],[[13,14,"pl-k"]],[],[[4,18,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,12,"pl-en"]],[[8,14,"pl-k"],[20,21,"pl-k"]],[],[],[],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,10,"pl-k"],[11,14,"pl-k"],[17,33,"pl-en"],[34,37,"pl-k"],[40,44,"pl-v"],[46,49,"pl-k"],[50,51,"pl-v"]],[[8,10,"pl-k"],[16,17,"pl-k"],[24,26,"pl-k"],[27,28,"pl-c1"]],[[12,18,"pl-k"]],[],[[8,11,"pl-k"],[16,17,"pl-k"],[22,23,"pl-k"],[30,31,"pl-k"],[34,35,"pl-k"],[36,37,"pl-c1"]],[[8,19,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[18,19,"pl-k"],[20,23,"pl-k"],[24,27,"pl-smi"]],[[8,11,"pl-k"],[16,17,"pl-k"],[18,19,"pl-c1"]],[[8,15,"pl-c"],[8,10,"pl-c"]],[[8,15,"pl-smi"],[24,25,"pl-k"],[26,29,"pl-k"],[30,37,"pl-smi"]],[[8,21,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[21,22,"pl-c1"],[26,27,"pl-k"],[32,34,"pl-k"]],[[19,20,"pl-k"]],[],[[15,17,"pl-k"],[19,20,"pl-k"],[28,29,"pl-k"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[26,27,"pl-k"],[32,33,"pl-k"],[42,44,"pl-k"]],[[12,41,"pl-c"],[12,14,"pl-c"]],[[19,20,"pl-k"],[32,33,"pl-k"]],[[12,26,"pl-c"],[12,14,"pl-c"]],[[19,20,"pl-k"]],[[12,22,"pl-c"],[12,14,"pl-c"]],[[19,21,"pl-k"],[23,24,"pl-k"],[32,33,"pl-k"]],[],[[8,14,"pl-k"]],[],[],[],[[0,5,"pl-c"],[0,2,"pl-c"]],[[0,16,"pl-c"],[0,2,"pl-c"]],[[0,3,"pl-c"],[0,3,"pl-c"]],[[0,50,"pl-c"]],[[0,68,"pl-c"]],[[0,3,"pl-c"],[1,3,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,10,"pl-k"],[11,14,"pl-k"],[17,33,"pl-en"],[34,37,"pl-k"],[40,44,"pl-v"],[46,49,"pl-k"],[50,51,"pl-v"]],[[8,27,"pl-k"],[19,26,"pl-smi"],[34,35,"pl-k"],[36,39,"pl-k"],[40,52,"pl-k"]],[[8,11,"pl-k"],[14,15,"pl-k"],[20,21,"pl-k"]],[[8,11,"pl-k"],[18,19,"pl-k"],[20,23,"pl-k"],[24,27,"pl-smi"],[30,31,"pl-k"],[34,35,"pl-k"],[36,37,"pl-c1"]],[[8,11,"pl-k"],[16,17,"pl-k"],[18,19,"pl-c1"]],[[8,11,"pl-k"],[12,15,"pl-k"],[18,19,"pl-k"],[20,21,"pl-c1"],[25,26,"pl-k"],[31,33,"pl-k"]],[[12,61,"pl-c"],[12,14,"pl-c"]],[[12,50,"pl-c"],[12,14,"pl-c"]],[[12,17,"pl-k"],[18,19,"pl-k"],[24,25,"pl-k"],[35,37,"pl-k"],[43,44,"pl-k"],[51,52,"pl-k"],[55,56,"pl-k"],[59,60,"pl-k"],[61,62,"pl-c1"]],[[21,22,"pl-k"]],[],[[12,48,"pl-c"],[12,14,"pl-c"]],[[12,17,"pl-k"],[18,19,"pl-k"],[24,25,"pl-k"],[35,37,"pl-k"],[48,49,"pl-k"],[61,62,"pl-k"]],[[21,22,"pl-k"]],[],[],[[17,18,"pl-k"]],[],[[12,56,"pl-c"],[12,14,"pl-c"]],[[12,14,"pl-k"],[17,19,"pl-k"],[22,23,"pl-k"],[24,25,"pl-c1"]],[[23,25,"pl-k"],[27,28,"pl-k"],[39,40,"pl-k"]],[],[],[[8,14,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,4,"pl-k"],[17,23,"pl-k"]],[],[],[[0,5,"pl-k"],[6,13,"pl-en"],[15,25,"pl-c"],[15,16,"pl-c"]],[[4,7,"pl-k"],[8,16,"pl-c1"],[17,21,"pl-smi"],[17,21,"pl-smi"]],[[8,12,"pl-c1"],[19,20,"pl-k"],[29,59,"pl-c"],[29,30,"pl-c"]],[],[[4,45,"pl-c"],[4,5,"pl-c"]],[[4,23,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[8,11,"pl-en"],[12,16,"pl-smi"],[12,16,"pl-smi"],[18,23,"pl-smi"]],[[8,10,"pl-k"],[11,15,"pl-c1"],[22,25,"pl-k"],[32,34,"pl-k"],[35,39,"pl-c1"],[46,47,"pl-c1"]],[[12,16,"pl-c1"],[32,79,"pl-c"],[32,33,"pl-c"]],[],[[4,63,"pl-c"],[4,5,"pl-c"]],[[4,27,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[8,12,"pl-en"],[13,17,"pl-smi"],[13,17,"pl-smi"],[19,24,"pl-smi"]],[[8,13,"pl-k"],[14,18,"pl-c1"],[25,28,"pl-k"],[35,36,"pl-k"],[37,41,"pl-c1"],[48,49,"pl-k"],[49,50,"pl-c1"]],[[12,16,"pl-c1"]],[[8,12,"pl-c1"]],[],[[4,38,"pl-c"],[4,5,"pl-c"]],[[4,7,"pl-k"],[8,13,"pl-en"],[14,18,"pl-smi"],[14,18,"pl-smi"]],[[8,14,"pl-k"],[15,19,"pl-c1"],[26,27,"pl-c1"]],[],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,24,"pl-en"],[25,29,"pl-smi"],[25,29,"pl-smi"],[31,35,"pl-smi"],[42,45,"pl-c1"],[48,49,"pl-smi"],[51,54,"pl-c1"],[64,67,"pl-c1"]],[[12,13,"pl-k"]],[[15,16,"pl-k"]],[[8,11,"pl-k"],[14,16,"pl-k"],[17,22,"pl-c1"],[27,39,"pl-c"],[27,28,"pl-c"]],[],[[35,54,"pl-c"],[35,36,"pl-c"]],[[8,11,"pl-k"],[14,16,"pl-k"],[17,22,"pl-c1"],[26,29,"pl-c1"]],[[27,28,"pl-k"],[33,45,"pl-c"],[33,34,"pl-c"]],[[30,44,"pl-c"],[30,31,"pl-c"]],[[39,48,"pl-c"],[39,40,"pl-c"]],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,14,"pl-c"],[0,2,"pl-c"]],[[0,4,"pl-k"],[5,12,"pl-v"],[13,19,"pl-k"]],[[12,15,"pl-k"]],[],[],[[0,4,"pl-k"],[5,15,"pl-en"],[19,26,"pl-v"]],[[4,10,"pl-k"]],[[15,19,"pl-c1"],[22,25,"pl-k"],[27,28,"pl-c1"]],[],[],[],[[0,4,"pl-k"],[5,23,"pl-en"],[6,7,"pl-v"],[9,16,"pl-v"],[18,23,"pl-en"],[26,29,"pl-v"]],[[4,10,"pl-k"],[13,18,"pl-smi"],[19,20,"pl-c1"]],[],[],[[0,4,"pl-k"],[5,22,"pl-en"],[6,7,"pl-v"],[9,16,"pl-v"],[18,22,"pl-en"],[25,28,"pl-v"]],[[4,10,"pl-k"],[13,18,"pl-smi"],[19,22,"pl-c1"],[25,30,"pl-smi"],[32,33,"pl-c1"]],[],[],[[0,4,"pl-k"],[5,23,"pl-en"],[6,7,"pl-v"],[9,16,"pl-v"],[18,23,"pl-en"],[26,30,"pl-v"]],[[4,10,"pl-k"],[11,14,"pl-c1"],[17,22,"pl-smi"],[27,28,"pl-c1"]],[],[],[[0,4,"pl-k"],[5,22,"pl-en"],[6,7,"pl-v"],[9,16,"pl-v"],[18,22,"pl-en"],[23,26,"pl-v"],[27,30,"pl-v"]],[[4,7,"pl-k"],[11,16,"pl-c1"],[30,34,"pl-c1"]],[[10,15,"pl-smi"],[20,25,"pl-smi"],[27,30,"pl-c1"],[33,38,"pl-smi"],[40,41,"pl-c1"]],[],[[6,11,"pl-smi"],[14,20,"pl-c1"],[23,28,"pl-smi"]],[],[],[[0,4,"pl-k"],[5,21,"pl-en"],[6,7,"pl-v"],[9,16,"pl-v"],[18,21,"pl-en"],[22,25,"pl-v"],[26,29,"pl-v"]],[[4,6,"pl-k"],[10,15,"pl-c1"],[30,35,"pl-c1"]],[[10,15,"pl-smi"],[20,25,"pl-smi"],[26,27,"pl-c1"]],[],[],[],[[0,4,"pl-k"],[5,21,"pl-en"],[22,26,"pl-v"],[29,32,"pl-v"],[34,35,"pl-v"],[36,39,"pl-v"],[43,46,"pl-v"]],[[4,9,"pl-smi"],[10,12,"pl-k"],[13,23,"pl-c1"]],[[4,10,"pl-smi"],[11,13,"pl-k"],[14,17,"pl-c1"]],[[4,7,"pl-smi"],[8,10,"pl-k"],[11,15,"pl-c1"],[18,21,"pl-k"],[23,24,"pl-c1"]],[[4,18,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,9,"pl-smi"],[10,12,"pl-k"],[13,14,"pl-c1"]],[[14,18,"pl-c1"]],[],[[4,18,"pl-c"],[4,6,"pl-c"]],[[10,16,"pl-c1"],[28,33,"pl-c1"]],[],[[4,7,"pl-k"],[8,9,"pl-smi"],[10,12,"pl-k"]],[[8,23,"pl-c"],[8,10,"pl-c"]],[[14,17,"pl-c1"]],[[8,23,"pl-c"],[8,10,"pl-c"]],[[14,18,"pl-c1"]],[[8,16,"pl-c"],[8,10,"pl-c"]],[[14,20,"pl-c1"],[32,37,"pl-c1"]],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,3,"pl-c"],[0,3,"pl-c"]],[[0,25,"pl-c"],[3,9,"pl-k"],[10,20,"pl-en"],[21,25,"pl-smi"]],[[0,20,"pl-c"],[3,9,"pl-k"],[10,18,"pl-en"],[19,20,"pl-smi"]],[[0,21,"pl-c"],[3,10,"pl-k"],[11,21,"pl-en"]],[[0,3,"pl-c"],[1,3,"pl-c"]],[[0,3,"pl-k"],[4,20,"pl-en"],[21,22,"pl-k"],[23,31,"pl-k"],[33,37,"pl-smi"],[39,40,"pl-smi"]],[[4,9,"pl-k"],[10,19,"pl-en"]],[],[[8,19,"pl-en"]],[[12,16,"pl-c1"],[17,22,"pl-smi"],[23,24,"pl-k"]],[],[[8,15,"pl-en"],[16,21,"pl-smi"]],[[12,15,"pl-k"],[21,22,"pl-k"],[23,27,"pl-c1"],[28,33,"pl-smi"],[34,38,"pl-c1"],[39,44,"pl-smi"],[45,51,"pl-c1"],[52,53,"pl-k"],[54,55,"pl-c1"]],[[12,17,"pl-k"],[24,27,"pl-k"],[28,37,"pl-c1"],[38,40,"pl-k"],[46,47,"pl-k"]],[[16,20,"pl-c1"],[21,26,"pl-smi"],[27,30,"pl-c1"]],[[21,22,"pl-k"],[23,27,"pl-c1"],[28,33,"pl-smi"],[34,38,"pl-c1"],[39,44,"pl-smi"],[45,51,"pl-c1"],[52,53,"pl-k"],[54,55,"pl-c1"]],[],[[12,16,"pl-c1"],[17,22,"pl-smi"],[23,27,"pl-c1"]],[],[[8,15,"pl-en"],[16,21,"pl-smi"]],[[12,15,"pl-k"],[22,23,"pl-k"],[24,28,"pl-c1"],[29,34,"pl-en"]],[[12,14,"pl-k"],[22,25,"pl-k"]],[[16,20,"pl-c1"],[21,26,"pl-smi"],[27,32,"pl-c1"]],[],[],[[8,13,"pl-en"]],[[12,18,"pl-k"],[19,23,"pl-c1"],[24,29,"pl-smi"],[30,31,"pl-c1"]],[],[],[[4,7,"pl-k"],[20,21,"pl-k"],[22,25,"pl-k"],[26,35,"pl-en"]],[[4,7,"pl-k"],[10,11,"pl-k"],[12,13,"pl-c1"],[17,18,"pl-k"],[19,20,"pl-c1"]],[[4,7,"pl-k"],[15,16,"pl-k"]],[[4,9,"pl-k"],[13,14,"pl-k"]],[[8,19,"pl-smi"],[20,27,"pl-en"],[34,36,"pl-k"]],[],[[4,10,"pl-smi"],[11,15,"pl-c1"],[16,27,"pl-smi"],[28,33,"pl-en"]],[[4,9,"pl-k"],[13,14,"pl-k"],[15,19,"pl-smi"],[20,26,"pl-c1"]],[[8,19,"pl-smi"],[20,27,"pl-en"]],[[8,19,"pl-smi"],[20,27,"pl-en"]],[[8,14,"pl-smi"],[15,19,"pl-c1"],[20,31,"pl-smi"],[32,37,"pl-en"]],[[9,11,"pl-k"],[14,16,"pl-k"]],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,8,"pl-k"],[26,30,"pl-v"],[30,31,"pl-k"],[32,38,"pl-c1"],[42,43,"pl-v"],[43,44,"pl-k"],[45,51,"pl-c1"],[52,53,"pl-k"],[54,60,"pl-c1"]],[[4,17,"pl-c"],[4,7,"pl-c"],[15,17,"pl-c"]],[[4,9,"pl-k"],[10,19,"pl-en"]],[[8,15,"pl-k"],[21,22,"pl-k"],[23,29,"pl-c1"]],[[8,19,"pl-k"]],[[12,16,"pl-c1"],[17,22,"pl-smi"],[23,24,"pl-k"]],[],[[8,61,"pl-c"],[8,11,"pl-c"],[59,61,"pl-c"]],[[8,14,"pl-k"],[23,28,"pl-v"],[28,29,"pl-k"],[30,36,"pl-c1"],[37,38,"pl-k"],[39,43,"pl-c1"]],[[12,15,"pl-k"],[20,21,"pl-k"],[22,28,"pl-c1"],[29,30,"pl-k"],[31,40,"pl-c1"],[41,42,"pl-k"],[43,47,"pl-c1"],[48,53,"pl-smi"],[54,58,"pl-c1"],[59,64,"pl-smi"],[65,71,"pl-c1"],[72,73,"pl-k"],[74,75,"pl-c1"]],[[12,17,"pl-k"],[19,23,"pl-smi"],[24,27,"pl-k"],[28,37,"pl-c1"],[38,40,"pl-k"],[41,45,"pl-smi"],[46,47,"pl-k"],[48,53,"pl-smi"]],[[16,20,"pl-c1"],[21,26,"pl-smi"],[27,30,"pl-c1"]],[[16,20,"pl-smi"],[21,22,"pl-k"],[23,27,"pl-c1"],[28,33,"pl-smi"],[34,38,"pl-c1"],[39,44,"pl-smi"],[45,51,"pl-c1"],[52,53,"pl-k"],[54,55,"pl-c1"]],[],[[12,16,"pl-c1"],[17,22,"pl-smi"],[23,27,"pl-c1"],[28,33,"pl-smi"]],[],[[8,36,"pl-c"],[8,11,"pl-c"],[34,36,"pl-c"]],[[8,14,"pl-k"],[23,28,"pl-v"],[28,29,"pl-k"],[30,36,"pl-c1"],[37,38,"pl-k"],[39,43,"pl-c1"]],[[12,15,"pl-k"],[19,20,"pl-k"],[21,27,"pl-c1"],[28,29,"pl-k"],[30,39,"pl-c1"],[40,41,"pl-k"],[42,46,"pl-c1"],[47,50,"pl-en"]],[[12,14,"pl-k"],[16,19,"pl-smi"],[20,23,"pl-k"],[24,33,"pl-c1"],[34,36,"pl-k"],[37,40,"pl-smi"],[41,44,"pl-k"],[45,50,"pl-smi"]],[[16,20,"pl-c1"],[21,26,"pl-smi"],[27,32,"pl-c1"]],[],[],[[8,14,"pl-k"],[20,21,"pl-k"],[22,28,"pl-c1"],[29,30,"pl-k"],[31,40,"pl-c1"]],[[12,18,"pl-k"],[19,23,"pl-c1"],[24,29,"pl-smi"],[30,31,"pl-c1"]],[],[],[[4,9,"pl-k"],[4,9,"pl-k"],[21,22,"pl-k"],[23,32,"pl-en"],[33,34,"pl-k"],[35,38,"pl-k"],[39,48,"pl-en"]],[[4,7,"pl-k"],[9,10,"pl-k"],[11,17,"pl-c1"],[18,19,"pl-k"],[20,21,"pl-c1"]],[[9,10,"pl-k"],[11,17,"pl-c1"],[18,19,"pl-k"],[20,21,"pl-c1"]],[[4,7,"pl-k"],[14,15,"pl-k"],[16,22,"pl-c1"],[25,26,"pl-k"]],[[4,9,"pl-k"],[11,12,"pl-smi"],[13,14,"pl-k"],[15,16,"pl-smi"]],[[8,19,"pl-smi"],[20,27,"pl-en"],[28,32,"pl-smi"],[33,34,"pl-smi"],[34,36,"pl-k"]],[],[[4,10,"pl-smi"],[11,15,"pl-c1"],[16,27,"pl-smi"],[28,31,"pl-en"],[33,34,"pl-k"]],[[4,9,"pl-k"],[11,12,"pl-smi"],[13,14,"pl-k"],[15,19,"pl-smi"],[20,26,"pl-c1"]],[[8,19,"pl-smi"],[20,27,"pl-en"],[28,32,"pl-smi"],[33,34,"pl-smi"]],[[8,19,"pl-smi"],[20,27,"pl-en"],[28,32,"pl-smi"],[33,34,"pl-smi"]],[[8,14,"pl-smi"],[15,19,"pl-c1"],[20,31,"pl-smi"],[32,35,"pl-en"],[37,38,"pl-k"]],[[8,9,"pl-smi"],[9,11,"pl-k"],[13,14,"pl-smi"],[14,16,"pl-k"]],[],[[4,10,"pl-k"],[11,17,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,8,"pl-c"],[0,3,"pl-c"]],[[0,5,"pl-k"],[6,20,"pl-en"]],[[4,7,"pl-k"],[28,29,"pl-k"]],[[4,7,"pl-k"],[28,29,"pl-k"]],[[4,7,"pl-k"],[28,29,"pl-k"]],[[4,7,"pl-k"],[27,28,"pl-k"]],[[4,7,"pl-k"],[15,18,"pl-c1"],[19,20,"pl-k"],[21,22,"pl-c1"]],[[4,8,"pl-k"],[9,10,"pl-en"],[11,16,"pl-smi"],[18,21,"pl-c1"],[22,23,"pl-k"],[24,25,"pl-c1"]],[[8,12,"pl-c1"],[13,18,"pl-c1"],[19,20,"pl-k"]],[],[[4,8,"pl-k"],[9,16,"pl-en"],[19,21,"pl-k"],[22,26,"pl-c1"]],[[8,14,"pl-k"],[15,19,"pl-c1"],[20,24,"pl-smi"],[25,27,"pl-k"],[28,31,"pl-c1"]],[],[[4,8,"pl-k"],[9,14,"pl-en"],[17,19,"pl-k"],[20,23,"pl-c1"],[23,24,"pl-k"]],[[8,14,"pl-k"],[15,19,"pl-c1"],[20,24,"pl-smi"],[24,25,"pl-k"],[26,31,"pl-c1"]],[],[[4,8,"pl-k"],[9,13,"pl-en"],[16,18,"pl-k"],[19,22,"pl-c1"],[22,23,"pl-k"]],[[8,14,"pl-k"],[15,19,"pl-c1"],[20,24,"pl-smi"],[24,25,"pl-k"],[26,31,"pl-c1"]],[],[[4,8,"pl-k"],[9,20,"pl-en"]],[[8,10,"pl-k"],[11,18,"pl-c1"]],[[12,18,"pl-k"]],[],[[8,11,"pl-k"],[17,18,"pl-k"],[19,23,"pl-c1"],[24,28,"pl-smi"],[28,29,"pl-k"],[30,34,"pl-smi"]],[[8,12,"pl-c1"],[13,17,"pl-smi"],[17,18,"pl-k"],[19,23,"pl-smi"],[24,25,"pl-k"],[26,29,"pl-c1"],[29,37,"pl-c"],[29,31,"pl-c"]],[[12,13,"pl-k"],[14,17,"pl-smi"],[18,19,"pl-k"],[20,23,"pl-c1"]],[[8,12,"pl-c1"],[13,17,"pl-smi"],[18,19,"pl-k"]],[],[[4,8,"pl-k"],[9,19,"pl-en"]],[[8,10,"pl-k"],[11,14,"pl-k"],[20,21,"pl-k"],[22,26,"pl-c1"]],[[12,14,"pl-k"],[15,18,"pl-k"],[23,24,"pl-k"]],[[16,20,"pl-c1"],[21,25,"pl-smi"],[25,26,"pl-k"],[27,30,"pl-smi"],[31,32,"pl-k"],[33,36,"pl-c1"]],[[20,24,"pl-smi"],[25,26,"pl-k"],[27,30,"pl-c1"]],[[16,20,"pl-c1"],[21,25,"pl-smi"],[26,27,"pl-k"]],[[14,18,"pl-k"]],[[16,20,"pl-c1"],[21,25,"pl-smi"],[26,27,"pl-k"],[28,31,"pl-c1"]],[[16,20,"pl-c1"],[21,25,"pl-smi"],[26,27,"pl-k"],[28,31,"pl-c1"]],[],[],[],[[4,8,"pl-k"],[9,15,"pl-en"],[16,17,"pl-en"],[18,23,"pl-smi"],[25,28,"pl-c1"]],[[8,11,"pl-k"],[17,18,"pl-k"],[19,33,"pl-c1"]],[[8,10,"pl-k"],[11,15,"pl-c1"],[21,23,"pl-k"],[24,27,"pl-c1"]],[[17,20,"pl-smi"],[21,22,"pl-k"],[23,27,"pl-c1"],[28,32,"pl-smi"]],[[12,16,"pl-c1"],[17,21,"pl-smi"],[21,22,"pl-k"],[23,27,"pl-smi"],[28,29,"pl-k"]],[[12,16,"pl-c1"],[17,21,"pl-smi"],[22,23,"pl-k"]],[[10,14,"pl-k"]],[[12,16,"pl-c1"],[17,21,"pl-smi"],[22,23,"pl-k"]],[[12,16,"pl-c1"],[17,21,"pl-smi"],[22,23,"pl-k"]],[[12,16,"pl-c1"],[17,20,"pl-smi"],[21,22,"pl-k"],[23,26,"pl-c1"]],[[12,16,"pl-c1"],[17,21,"pl-smi"],[22,23,"pl-k"],[24,27,"pl-c1"]],[],[],[],[[0,13,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,13,"pl-en"]],[[0,32,"pl-c"],[0,2,"pl-c"]],[[4,7,"pl-k"],[29,30,"pl-k"]],[[4,8,"pl-k"]],[[0,25,"pl-c"],[0,2,"pl-c"]],[[14,15,"pl-k"],[16,30,"pl-c1"]],[],[[4,28,"pl-c"],[4,6,"pl-c"]],[[4,8,"pl-k"],[9,12,"pl-en"],[13,14,"pl-smi"],[13,14,"pl-en"],[16,19,"pl-c1"]],[[8,10,"pl-k"],[11,12,"pl-k"],[18,25,"pl-c1"],[28,30,"pl-k"],[31,36,"pl-c1"],[39,41,"pl-k"]],[[18,29,"pl-c1"]],[],[],[[4,45,"pl-c"],[4,6,"pl-c"]],[[4,8,"pl-k"],[9,13,"pl-en"],[14,15,"pl-smi"],[14,15,"pl-en"],[17,20,"pl-c1"]],[[8,13,"pl-k"],[14,15,"pl-k"],[21,28,"pl-c1"],[31,33,"pl-k"],[40,44,"pl-c1"],[46,47,"pl-k"],[48,49,"pl-k"]],[[18,28,"pl-c1"]],[],[[14,20,"pl-c1"]],[],[[4,20,"pl-c"],[4,6,"pl-c"]],[[4,8,"pl-k"],[9,14,"pl-en"],[17,19,"pl-k"],[20,23,"pl-c1"]],[[8,14,"pl-k"],[21,26,"pl-c1"],[29,31,"pl-k"],[32,34,"pl-c1"]],[],[],[],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,8,"pl-k"],[9,25,"pl-en"],[26,27,"pl-en"],[28,32,"pl-smi"],[35,38,"pl-c1"],[41,42,"pl-en"],[43,44,"pl-smi"],[46,49,"pl-c1"],[51,53,"pl-k"],[55,58,"pl-c1"]],[[8,15,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[16,17,"pl-k"],[19,22,"pl-c1"]],[[8,11,"pl-k"],[18,19,"pl-k"],[20,27,"pl-c1"]],[[8,22,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[14,16,"pl-k"],[17,18,"pl-c1"],[19,22,"pl-k"]],[[18,22,"pl-c1"],[23,24,"pl-c1"]],[],[[8,25,"pl-c"],[8,10,"pl-c"]],[[12,18,"pl-c1"],[25,30,"pl-c1"]],[[8,11,"pl-k"],[14,16,"pl-k"],[19,22,"pl-k"],[28,33,"pl-c1"]],[[12,26,"pl-c"],[12,14,"pl-c"]],[[18,21,"pl-c1"],[22,23,"pl-c1"],[32,33,"pl-k"]],[[12,26,"pl-c"],[12,14,"pl-c"]],[[18,22,"pl-c1"],[23,24,"pl-c1"]],[[12,24,"pl-c"],[12,14,"pl-c"]],[[16,22,"pl-c1"],[29,34,"pl-c1"]],[],[[8,14,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,4,"pl-k"],[5,21,"pl-en"],[22,23,"pl-en"],[24,28,"pl-smi"],[31,34,"pl-c1"],[37,38,"pl-en"],[39,40,"pl-smi"],[42,45,"pl-c1"],[47,49,"pl-k"],[51,54,"pl-c1"]],[[4,7,"pl-k"],[15,16,"pl-k"],[18,21,"pl-c1"]],[[4,7,"pl-k"],[15,16,"pl-k"],[18,21,"pl-c1"]],[[4,7,"pl-k"],[14,15,"pl-k"],[16,17,"pl-c1"],[24,25,"pl-k"],[32,33,"pl-k"],[36,37,"pl-k"],[38,39,"pl-c1"]],[],[[4,9,"pl-k"],[16,17,"pl-k"],[23,28,"pl-c1"]],[[8,11,"pl-k"],[18,19,"pl-k"]],[],[[8,23,"pl-c"],[8,10,"pl-c"]],[[8,10,"pl-k"],[16,17,"pl-k"],[18,19,"pl-c1"],[26,27,"pl-k"],[28,29,"pl-c1"],[30,32,"pl-k"],[40,45,"pl-c1"]],[[19,30,"pl-c1"]],[],[],[[8,20,"pl-c"],[8,10,"pl-c"]],[[8,13,"pl-k"],[14,15,"pl-k"],[22,29,"pl-c1"],[37,38,"pl-k"],[51,55,"pl-c1"],[55,56,"pl-k"]],[[19,29,"pl-c1"]],[],[[15,21,"pl-c1"]],[],[[8,10,"pl-k"],[16,18,"pl-k"],[19,20,"pl-c1"],[23,30,"pl-c"],[23,25,"pl-c"]],[[19,25,"pl-c1"],[38,43,"pl-c1"],[43,44,"pl-k"]],[],[],[[14,16,"pl-k"],[17,18,"pl-c1"]],[[13,15,"pl-k"],[16,17,"pl-c1"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-en"],[13,23,"pl-en"],[24,31,"pl-en"],[32,43,"pl-en"]],[[0,6,"pl-k"],[7,15,"pl-en"]],[[2,5,"pl-k"],[6,22,"pl-en"],[23,27,"pl-v"],[29,34,"pl-en"],[35,38,"pl-en"],[41,42,"pl-v"],[44,47,"pl-en"],[48,49,"pl-k"],[50,55,"pl-en"],[56,59,"pl-en"],[61,62,"pl-k"]],[[4,7,"pl-k"],[8,11,"pl-v"],[12,13,"pl-k"],[26,27,"pl-k"],[30,31,"pl-k"],[32,33,"pl-c1"],[36,45,"pl-c"],[36,38,"pl-c"]],[[4,7,"pl-k"],[8,11,"pl-v"],[11,12,"pl-k"],[13,18,"pl-en"],[19,22,"pl-en"],[24,25,"pl-k"],[26,29,"pl-k"],[30,35,"pl-en"],[36,39,"pl-en"],[48,60,"pl-c"],[48,50,"pl-c"]],[[4,7,"pl-k"],[8,13,"pl-v"],[14,15,"pl-k"],[16,17,"pl-c1"],[20,29,"pl-c"],[20,22,"pl-c"]],[[4,7,"pl-k"],[8,13,"pl-v"],[13,14,"pl-k"],[15,22,"pl-en"],[23,24,"pl-k"],[25,28,"pl-k"],[29,36,"pl-en"],[40,48,"pl-c"],[40,42,"pl-c"]],[[4,19,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[11,13,"pl-k"],[14,15,"pl-c1"]],[],[],[[15,16,"pl-k"],[28,42,"pl-c"],[28,30,"pl-c"]],[[10,12,"pl-k"],[13,14,"pl-c1"]],[[4,7,"pl-k"],[11,13,"pl-k"]],[[24,25,"pl-k"],[32,46,"pl-c"],[32,34,"pl-c"]],[[32,44,"pl-c"],[32,34,"pl-c"]],[[17,18,"pl-k"],[32,37,"pl-c"],[32,34,"pl-c"]],[[11,13,"pl-k"],[13,14,"pl-c1"]],[],[[4,28,"pl-c"],[4,6,"pl-c"]],[],[],[],[],[[0,5,"pl-k"],[6,13,"pl-en"]],[[2,5,"pl-k"],[6,11,"pl-v"],[12,13,"pl-k"],[14,25,"pl-en"],[26,29,"pl-en"]],[],[[2,27,"pl-c"],[2,4,"pl-c"]],[[2,5,"pl-k"],[6,10,"pl-en"],[11,16,"pl-v"],[18,21,"pl-en"],[22,23,"pl-k"],[24,28,"pl-en"],[29,30,"pl-k"]],[[4,6,"pl-k"],[8,9,"pl-k"],[23,25,"pl-k"],[37,39,"pl-k"]],[[19,20,"pl-c1"]],[],[],[],[[2,22,"pl-c"],[2,4,"pl-c"]],[[2,5,"pl-k"],[6,9,"pl-en"],[10,15,"pl-v"],[17,20,"pl-en"],[21,22,"pl-k"],[23,27,"pl-en"],[28,29,"pl-k"]],[[4,9,"pl-k"],[11,12,"pl-k"],[26,28,"pl-k"],[35,36,"pl-k"]],[[32,33,"pl-k"],[34,35,"pl-c1"]],[],[],[],[],[[2,5,"pl-k"],[6,10,"pl-en"],[12,13,"pl-k"],[14,17,"pl-en"],[18,19,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,5,"pl-k"],[6,15,"pl-en"]],[[8,15,"pl-k"],[16,26,"pl-en"],[27,30,"pl-k"],[32,42,"pl-en"],[43,44,"pl-k"],[45,48,"pl-k"],[49,59,"pl-en"],[60,63,"pl-k"]],[],[[8,14,"pl-k"],[15,19,"pl-k"],[20,27,"pl-en"],[28,31,"pl-k"],[32,33,"pl-en"]],[[12,17,"pl-k"],[18,28,"pl-smi"],[29,34,"pl-smi"],[35,36,"pl-k"],[37,38,"pl-c1"],[39,41,"pl-k"],[42,52,"pl-smi"],[53,57,"pl-smi"],[58,63,"pl-smi"],[64,65,"pl-k"],[66,67,"pl-smi"]],[[16,26,"pl-smi"],[27,37,"pl-en"]],[],[[12,22,"pl-smi"],[23,30,"pl-en"],[31,32,"pl-smi"]],[],[],[[8,14,"pl-k"],[15,18,"pl-k"],[19,22,"pl-en"]],[[12,18,"pl-k"],[19,29,"pl-smi"],[30,35,"pl-smi"],[36,41,"pl-smi"]],[],[],[[8,14,"pl-k"],[15,19,"pl-k"],[20,27,"pl-en"],[28,31,"pl-k"],[32,33,"pl-en"]],[[12,14,"pl-k"],[15,25,"pl-smi"],[26,31,"pl-smi"],[32,37,"pl-smi"],[38,40,"pl-k"],[41,42,"pl-smi"]],[[16,26,"pl-smi"],[27,38,"pl-en"]],[],[],[],[],[[4,13,"pl-smi"],[14,20,"pl-smi"],[21,22,"pl-k"],[23,26,"pl-k"],[27,36,"pl-en"]],[[4,8,"pl-smi"],[8,9,"pl-k"],[9,12,"pl-k"],[12,13,"pl-k"],[14,17,"pl-smi"],[18,19,"pl-k"],[20,23,"pl-k"],[24,28,"pl-en"],[29,32,"pl-k"]],[],[[4,10,"pl-k"],[11,14,"pl-k"],[17,33,"pl-en"],[34,37,"pl-k"],[40,44,"pl-smi"],[46,49,"pl-k"],[50,51,"pl-smi"]],[[8,11,"pl-en"],[12,15,"pl-k"],[16,17,"pl-smi"],[18,19,"pl-k"],[20,21,"pl-c1"],[23,24,"pl-smi"],[25,26,"pl-k"],[27,28,"pl-smi"],[30,31,"pl-smi"],[31,33,"pl-k"]],[[12,18,"pl-smi"],[19,26,"pl-en"],[27,31,"pl-smi"],[32,33,"pl-smi"]],[],[[8,11,"pl-smi"],[12,15,"pl-en"],[16,22,"pl-smi"],[23,26,"pl-en"]],[[8,11,"pl-en"],[12,15,"pl-k"],[16,17,"pl-smi"],[18,19,"pl-k"],[20,21,"pl-smi"],[23,24,"pl-smi"],[25,26,"pl-k"],[27,31,"pl-smi"],[32,38,"pl-smi"],[40,41,"pl-smi"],[41,43,"pl-k"]],[[12,18,"pl-smi"],[19,26,"pl-en"],[27,31,"pl-smi"],[32,33,"pl-smi"],[33,34,"pl-k"],[34,35,"pl-smi"]],[[12,18,"pl-smi"],[19,26,"pl-en"],[27,31,"pl-smi"],[32,33,"pl-smi"]],[[12,15,"pl-smi"],[16,19,"pl-en"],[20,26,"pl-smi"],[27,30,"pl-en"]],[],[],[[8,14,"pl-smi"],[15,18,"pl-smi"],[19,26,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,4,"pl-k"],[5,13,"pl-en"]],[[4,7,"pl-k"],[8,10,"pl-k"],[11,29,"pl-en"],[30,34,"pl-smi"],[34,35,"pl-k"],[36,39,"pl-en"],[40,43,"pl-k"],[46,47,"pl-smi"],[47,48,"pl-k"],[49,52,"pl-k"],[54,56,"pl-k"],[57,60,"pl-en"],[61,64,"pl-k"]],[[8,11,"pl-k"],[12,15,"pl-k"],[16,19,"pl-smi"],[20,21,"pl-k"],[22,26,"pl-en"]],[[8,11,"pl-k"],[12,15,"pl-k"],[16,21,"pl-smi"],[22,23,"pl-k"],[24,32,"pl-en"],[32,34,"pl-k"],[34,47,"pl-en"],[48,49,"pl-smi"],[50,52,"pl-k"],[53,58,"pl-k"]],[[8,11,"pl-k"],[13,14,"pl-smi"],[16,17,"pl-k"],[17,18,"pl-smi"],[20,22,"pl-k"],[23,27,"pl-smi"],[27,28,"pl-k"],[28,32,"pl-en"],[34,35,"pl-k"],[35,44,"pl-en"]],[[12,38,"pl-c"],[12,14,"pl-c"]],[[12,14,"pl-k"],[15,16,"pl-smi"],[17,18,"pl-k"],[19,24,"pl-smi"],[24,25,"pl-k"],[25,30,"pl-en"],[32,33,"pl-k"],[33,42,"pl-en"],[43,44,"pl-k"],[44,45,"pl-c1"],[47,49,"pl-k"],[50,51,"pl-smi"],[52,54,"pl-k"],[55,60,"pl-k"]],[[16,21,"pl-smi"],[21,22,"pl-k"],[22,31,"pl-en"]],[],[[12,17,"pl-k"],[18,21,"pl-k"],[22,26,"pl-en"],[27,28,"pl-k"],[28,33,"pl-smi"],[35,36,"pl-k"],[37,42,"pl-smi"],[42,43,"pl-k"],[43,47,"pl-en"]],[[16,18,"pl-k"],[19,23,"pl-smi"],[24,29,"pl-smi"],[31,33,"pl-k"],[34,35,"pl-smi"]],[[20,25,"pl-k"]],[],[[16,48,"pl-c"],[16,18,"pl-c"]],[[16,21,"pl-smi"],[21,22,"pl-k"],[22,30,"pl-en"]],[],[[12,17,"pl-smi"],[17,18,"pl-k"],[18,27,"pl-en"],[28,29,"pl-smi"]],[[12,14,"pl-k"],[15,16,"pl-smi"],[17,19,"pl-k"],[20,21,"pl-smi"],[22,24,"pl-k"],[25,30,"pl-k"],[31,32,"pl-k"],[33,34,"pl-c1"]],[[16,19,"pl-smi"],[19,20,"pl-k"],[20,24,"pl-en"],[25,29,"pl-smi"],[30,35,"pl-smi"],[36,37,"pl-c1"]],[],[],[[8,11,"pl-smi"]],[],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[],[[5,6,"pl-s"],[6,14,"pl-c1"],[14,15,"pl-s"]],[],[[67,68,"pl-s"]],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[],[[11,14,"pl-ent"],[40,43,"pl-ent"]],[[17,20,"pl-ent"]],[[15,18,"pl-ent"]],[],[[45,46,"pl-s"],[51,52,"pl-s"]],[[26,27,"pl-s"],[28,29,"pl-s"]],[[42,43,"pl-s"]],[],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,18,"pl-c1"]],[[0,70,"pl-c1"]],[[0,48,"pl-c1"]],[[0,4,"pl-c1"]]],"colorizedLines":null}},"title":"leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master","appPayload":{},"meta":{"title":"leetcode-master/problems/0239.滑动窗口最大值.md at master · feinan/leetcode-master"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/feinan/leetcode-master" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">0239.滑动窗口最大值.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/feinan/leetcode-master/commits/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/feinan/leetcode-master/commits/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="27.8 KB" style="--truncate-max-width:100%"><span>867 lines (731 loc) · 27.8 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">0239.滑动窗口最大值.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="27.8 KB" style="--truncate-max-width:100%"><span>867 lines (731 loc) · 27.8 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><p align="center" dir="auto">
<a href="https://www.programmercarl.com/xunlian/xunlianying.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/训练营.png" width="1000" style="max-width: 100%;">
</a>
</p><p align="center" dir="auto"><strong><a href="/feinan/leetcode-master/blob/master/problems/qita/join.md">参与本项目</a>，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！</strong></p>
<blockquote>
<p dir="auto">要用啥数据结构呢？</p>
</blockquote>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">239. 滑动窗口最大值</h1><a id="user-content-239-滑动窗口最大值" class="anchor" aria-label="Permalink: 239. 滑动窗口最大值" href="#239-滑动窗口最大值"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://leetcode.cn/problems/sliding-window-maximum/" rel="nofollow">力扣题目链接</a></p>
<p dir="auto">给定一个数组 nums，有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。</p>
<p dir="auto">返回滑动窗口中的最大值。</p>
<p dir="auto">进阶：</p>
<p dir="auto">你能在线性时间复杂度内解决此题吗？</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/fa566fc91e5bf7ab314aafd229be11d3357d31a4d0860bb626c84232693ade6a/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f706963732f3233392ee6bb91e58aa8e7aa97e58fa3e69c80e5a4a7e580bc2e706e67"><img src="https://camo.githubusercontent.com/fa566fc91e5bf7ab314aafd229be11d3357d31a4d0860bb626c84232693ade6a/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f706963732f3233392ee6bb91e58aa8e7aa97e58fa3e69c80e5a4a7e580bc2e706e67" width="600" data-canonical-src="https://code-thinking.cdn.bcebos.com/pics/239.滑动窗口最大值.png" style="max-width: 100%;"></a> </p>
<p dir="auto">提示：</p>
<ul dir="auto">
<li>1 &lt;= nums.length &lt;= 10^5</li>
<li>-10^4 &lt;= nums[i] &lt;= 10^4</li>
<li>1 &lt;= k &lt;= nums.length</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">算法公开课</h2><a id="user-content-算法公开课" class="anchor" aria-label="Permalink: 算法公开课" href="#算法公开课"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong><a href="https://programmercarl.com/other/gongkaike.html" rel="nofollow">《代码随想录》算法视频公开课</a>：<a href="https://www.bilibili.com/video/BV1XS4y1p7qj" rel="nofollow">单调队列正式登场！| LeetCode：239. 滑动窗口最大值</a>，相信结合视频再看本篇题解，更有助于大家对本题的理解</strong>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">思路</h2><a id="user-content-思路" class="anchor" aria-label="Permalink: 思路" href="#思路"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">这是使用单调队列的经典题目。</p>
<p dir="auto">难点是如何求一个区间里的最大值呢？ （这好像是废话），暴力一下不就得了。</p>
<p dir="auto">暴力方法，遍历一遍的过程中每次从窗口中再找到最大的数值，这样很明显是O(n × k)的算法。</p>
<p dir="auto">有的同学可能会想用一个大顶堆（优先级队列）来存放这个窗口里的k个数字，这样就可以知道最大的最大值是多少了， <strong>但是问题是这个窗口是移动的，而大顶堆每次只能弹出最大值，我们无法移除其他数值，这样就造成大顶堆维护的不是滑动窗口里面的数值了。所以不能用大顶堆。</strong></p>
<p dir="auto">此时我们需要一个队列，这个队列呢，放进去窗口里的元素，然后随着窗口的移动，队列也一进一出，每次移动之后，队列告诉我们里面的最大值是什么。</p>
<p dir="auto">这个队列应该长这个样子：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class MyQueue {
public:
    void pop(int value) {
    }
    void push(int value) {
    }
    int front() {
        return que.front();
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">MyQueue</span> {
<span class="pl-k">public:</span>
    <span class="pl-k">void</span> <span class="pl-en">pop</span>(<span class="pl-k">int</span> value) {
    }
    <span class="pl-k">void</span> <span class="pl-en">push</span>(<span class="pl-k">int</span> value) {
    }
    <span class="pl-k">int</span> <span class="pl-en">front</span>() {
        <span class="pl-k">return</span> que.<span class="pl-c1">front</span>();
    }
};</pre></div>
<p dir="auto">每次窗口移动的时候，调用que.pop(滑动窗口中移除元素的数值)，que.push(滑动窗口添加元素的数值)，然后que.front()就返回我们要的最大值。</p>
<p dir="auto">这么个队列香不香，要是有现成的这种数据结构是不是更香了！</p>
<p dir="auto">其实在C++中，可以使用 multiset 来模拟这个过程，文末提供这个解法仅针对C++，以下讲解我们还是靠自己来实现这个单调队列。</p>
<p dir="auto">然后再分析一下，队列里的元素一定是要排序的，而且要最大值放在出队口，要不然怎么知道最大值呢。</p>
<p dir="auto">但如果把窗口里的元素都放进队列里，窗口移动的时候，队列需要弹出元素。</p>
<p dir="auto">那么问题来了，已经排序之后的队列 怎么能把窗口要移除的元素（这个元素可不一定是最大值）弹出呢。</p>
<p dir="auto">大家此时应该陷入深思.....</p>
<p dir="auto"><strong>其实队列没有必要维护窗口里的所有元素，只需要维护有可能成为窗口里最大值的元素就可以了，同时保证队列里的元素数值是由大到小的。</strong></p>
<p dir="auto">那么这个维护元素单调递减的队列就叫做<strong>单调队列，即单调递减或单调递增的队列。C++中没有直接支持单调队列，需要我们自己来实现一个单调队列</strong></p>
<p dir="auto"><strong>不要以为实现的单调队列就是 对窗口里面的数进行排序，如果排序的话，那和优先级队列又有什么区别了呢。</strong></p>
<p dir="auto">来看一下单调队列如何维护队列里的元素。</p>
<p dir="auto">动画如下：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9497382a9f9fb6c01b480d238b15ff252664fdbc48f0d67ba9e41fcb297d9b81/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432e676966"><img src="https://camo.githubusercontent.com/9497382a9f9fb6c01b480d238b15ff252664fdbc48f0d67ba9e41fcb297d9b81/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432e676966" alt="239.滑动窗口最大值" data-animated-image="" data-canonical-src="https://code-thinking.cdn.bcebos.com/gifs/239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.gif" style="max-width: 100%;"></a></p>
<p dir="auto">对于窗口里的元素{2, 3, 5, 1 ,4}，单调队列里只维护{5, 4} 就够了，保持单调队列里单调递减，此时队列出口元素就是窗口里最大元素。</p>
<p dir="auto">此时大家应该怀疑单调队列里维护着{5, 4} 怎么配合窗口进行滑动呢？</p>
<p dir="auto">设计单调队列的时候，pop，和push操作要保持如下规则：</p>
<ol dir="auto">
<li>pop(value)：如果窗口移除的元素value等于单调队列的出口元素，那么队列弹出元素，否则不用任何操作</li>
<li>push(value)：如果push的元素value大于入口元素的数值，那么就将队列入口的元素弹出，直到push元素的数值小于等于队列入口元素的数值为止</li>
</ol>
<p dir="auto">保持如上规则，每次窗口移动的时候，只要问que.front()就可以返回当前窗口的最大值。</p>
<p dir="auto">为了更直观的感受到单调队列的工作过程，以题目示例为例，输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3，动画如下：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3dce979617cefcc8959e91cab5ae9a12c33e2e89db3dba40d7d15583fd6d1f15/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432d322e676966"><img src="https://camo.githubusercontent.com/3dce979617cefcc8959e91cab5ae9a12c33e2e89db3dba40d7d15583fd6d1f15/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f3233392e2545362542422539312545352538412541382545372541412539372545352538462541332545362539432538302545352541342541372545352538302542432d322e676966" alt="239.滑动窗口最大值-2" data-animated-image="" data-canonical-src="https://code-thinking.cdn.bcebos.com/gifs/239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC-2.gif" style="max-width: 100%;"></a></p>
<p dir="auto">那么我们用什么数据结构来实现这个单调队列呢？</p>
<p dir="auto">使用deque最为合适，在文章<a href="https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html" rel="nofollow">栈与队列：来看看栈和队列不为人知的一面</a>中，我们就提到了常用的queue在没有指定容器的情况下，deque就是默认底层容器。</p>
<p dir="auto">基于刚刚说过的单调队列pop和push的规则，代码不难实现，如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class MyQueue { //单调队列（从大到小）
public:
    deque&lt;int&gt; que; // 使用deque来实现单调队列
    // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。
    // 同时pop之前判断队列当前是否为空。
    void pop(int value) {
        if (!que.empty() &amp;&amp; value == que.front()) {
            que.pop_front();
        }
    }
    // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。
    // 这样就保持了队列里的数值是单调从大到小的了。
    void push(int value) {
        while (!que.empty() &amp;&amp; value &gt; que.back()) {
            que.pop_back();
        }
        que.push_back(value);

    }
    // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。
    int front() {
        return que.front();
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">MyQueue</span> { <span class="pl-c"><span class="pl-c">//</span>单调队列（从大到小）</span>
<span class="pl-k">public:</span>
    deque&lt;<span class="pl-k">int</span>&gt; que; <span class="pl-c"><span class="pl-c">//</span> 使用deque来实现单调队列</span>
    <span class="pl-c"><span class="pl-c">//</span> 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。</span>
    <span class="pl-c"><span class="pl-c">//</span> 同时pop之前判断队列当前是否为空。</span>
    <span class="pl-k">void</span> <span class="pl-en">pop</span>(<span class="pl-k">int</span> value) {
        <span class="pl-k">if</span> (!que.<span class="pl-c1">empty</span>() &amp;&amp; value == que.<span class="pl-c1">front</span>()) {
            que.<span class="pl-c1">pop_front</span>();
        }
    }
    <span class="pl-c"><span class="pl-c">//</span> 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。</span>
    <span class="pl-c"><span class="pl-c">//</span> 这样就保持了队列里的数值是单调从大到小的了。</span>
    <span class="pl-k">void</span> <span class="pl-en">push</span>(<span class="pl-k">int</span> value) {
        <span class="pl-k">while</span> (!que.<span class="pl-c1">empty</span>() &amp;&amp; value &gt; que.<span class="pl-c1">back</span>()) {
            que.<span class="pl-c1">pop_back</span>();
        }
        que.<span class="pl-c1">push_back</span>(value);

    }
    <span class="pl-c"><span class="pl-c">//</span> 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。</span>
    <span class="pl-k">int</span> <span class="pl-en">front</span>() {
        <span class="pl-k">return</span> que.<span class="pl-c1">front</span>();
    }
};</pre></div>
<p dir="auto">这样我们就用deque实现了一个单调队列，接下来解决滑动窗口最大值的问题就很简单了，直接看代码吧。</p>
<p dir="auto">C++代码如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
private:
    class MyQueue { //单调队列（从大到小）
    public:
        deque&lt;int&gt; que; // 使用deque来实现单调队列
        // 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。
        // 同时pop之前判断队列当前是否为空。
        void pop(int value) {
            if (!que.empty() &amp;&amp; value == que.front()) {
                que.pop_front();
            }
        }
        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。
        // 这样就保持了队列里的数值是单调从大到小的了。
        void push(int value) {
            while (!que.empty() &amp;&amp; value &gt; que.back()) {
                que.pop_back();
            }
            que.push_back(value);

        }
        // 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。
        int front() {
            return que.front();
        }
    };
public:
    vector&lt;int&gt; maxSlidingWindow(vector&lt;int&gt;&amp; nums, int k) {
        MyQueue que;
        vector&lt;int&gt; result;
        for (int i = 0; i &lt; k; i++) { // 先将前k的元素放进队列
            que.push(nums[i]);
        }
        result.push_back(que.front()); // result 记录前k的元素的最大值
        for (int i = k; i &lt; nums.size(); i++) {
            que.pop(nums[i - k]); // 滑动窗口移除最前面元素
            que.push(nums[i]); // 滑动窗口前加入最后面的元素
            result.push_back(que.front()); // 记录对应的最大值
        }
        return result;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">private:</span>
    <span class="pl-k">class</span> <span class="pl-en">MyQueue</span> { <span class="pl-c"><span class="pl-c">//</span>单调队列（从大到小）</span>
    <span class="pl-k">public:</span>
        deque&lt;<span class="pl-k">int</span>&gt; que; <span class="pl-c"><span class="pl-c">//</span> 使用deque来实现单调队列</span>
        <span class="pl-c"><span class="pl-c">//</span> 每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。</span>
        <span class="pl-c"><span class="pl-c">//</span> 同时pop之前判断队列当前是否为空。</span>
        <span class="pl-k">void</span> <span class="pl-en">pop</span>(<span class="pl-k">int</span> value) {
            <span class="pl-k">if</span> (!que.<span class="pl-c1">empty</span>() &amp;&amp; value == que.<span class="pl-c1">front</span>()) {
                que.<span class="pl-c1">pop_front</span>();
            }
        }
        <span class="pl-c"><span class="pl-c">//</span> 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。</span>
        <span class="pl-c"><span class="pl-c">//</span> 这样就保持了队列里的数值是单调从大到小的了。</span>
        <span class="pl-k">void</span> <span class="pl-en">push</span>(<span class="pl-k">int</span> value) {
            <span class="pl-k">while</span> (!que.<span class="pl-c1">empty</span>() &amp;&amp; value &gt; que.<span class="pl-c1">back</span>()) {
                que.<span class="pl-c1">pop_back</span>();
            }
            que.<span class="pl-c1">push_back</span>(value);

        }
        <span class="pl-c"><span class="pl-c">//</span> 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。</span>
        <span class="pl-k">int</span> <span class="pl-en">front</span>() {
            <span class="pl-k">return</span> que.<span class="pl-c1">front</span>();
        }
    };
<span class="pl-k">public:</span>
    vector&lt;<span class="pl-k">int</span>&gt; <span class="pl-en">maxSlidingWindow</span>(vector&lt;<span class="pl-k">int</span>&gt;&amp; nums, <span class="pl-k">int</span> k) {
        MyQueue que;
        vector&lt;<span class="pl-k">int</span>&gt; result;
        <span class="pl-k">for</span> (<span class="pl-k">int</span> i = <span class="pl-c1">0</span>; i &lt; k; i++) { <span class="pl-c"><span class="pl-c">//</span> 先将前k的元素放进队列</span>
            que.<span class="pl-c1">push</span>(nums[i]);
        }
        result.<span class="pl-c1">push_back</span>(que.<span class="pl-c1">front</span>()); <span class="pl-c"><span class="pl-c">//</span> result 记录前k的元素的最大值</span>
        <span class="pl-k">for</span> (<span class="pl-k">int</span> i = k; i &lt; nums.<span class="pl-c1">size</span>(); i++) {
            que.<span class="pl-c1">pop</span>(nums[i - k]); <span class="pl-c"><span class="pl-c">//</span> 滑动窗口移除最前面元素</span>
            que.<span class="pl-c1">push</span>(nums[i]); <span class="pl-c"><span class="pl-c">//</span> 滑动窗口前加入最后面的元素</span>
            result.<span class="pl-c1">push_back</span>(que.<span class="pl-c1">front</span>()); <span class="pl-c"><span class="pl-c">//</span> 记录对应的最大值</span>
        }
        <span class="pl-k">return</span> result;
    }
};</pre></div>
<ul dir="auto">
<li>时间复杂度: O(n)</li>
<li>空间复杂度: O(k)</li>
</ul>
<p dir="auto">再来看一下时间复杂度，使用单调队列的时间复杂度是 O(n)。</p>
<p dir="auto">有的同学可能想了，在队列中 push元素的过程中，还有pop操作呢，感觉不是纯粹的O(n)。</p>
<p dir="auto">其实，大家可以自己观察一下单调队列的实现，nums 中的每个元素最多也就被 push_back 和 pop_back 各一次，没有任何多余操作，所以整体的复杂度还是 O(n)。</p>
<p dir="auto">空间复杂度因为我们定义一个辅助队列，所以是O(k)。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">扩展</h2><a id="user-content-扩展" class="anchor" aria-label="Permalink: 扩展" href="#扩展"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">大家貌似对单调队列 都有一些疑惑，首先要明确的是，题解中单调队列里的pop和push接口，仅适用于本题哈。单调队列不是一成不变的，而是不同场景不同写法，总之要保证队列里单调递减或递增的原则，所以叫做单调队列。 不要以为本题中的单调队列实现就是固定的写法哈。</p>
<p dir="auto">大家貌似对deque也有一些疑惑，C++中deque是stack和queue默认的底层实现容器（这个我们之前已经讲过啦），deque是可以两边扩展的，而且deque里元素并不是严格的连续分布的。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">其他语言版本</h2><a id="user-content-其他语言版本" class="anchor" aria-label="Permalink: 其他语言版本" href="#其他语言版本"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Java：</h3><a id="user-content-java" class="anchor" aria-label="Permalink: Java：" href="#java"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//解法一
//自定义数组
class MyQueue {
    Deque&lt;Integer&gt; deque = new LinkedList&lt;&gt;();
    //弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出
    //同时判断队列当前是否为空
    void poll(int val) {
        if (!deque.isEmpty() &amp;&amp; val == deque.peek()) {
            deque.poll();
        }
    }
    //添加元素时，如果要添加的元素大于入口处的元素，就将入口元素弹出
    //保证队列元素单调递减
    //比如此时队列元素3,1，2将要入队，比1大，所以1弹出，此时队列：3,2
    void add(int val) {
        while (!deque.isEmpty() &amp;&amp; val &gt; deque.getLast()) {
            deque.removeLast();
        }
        deque.add(val);
    }
    //队列队顶元素始终为最大值
    int peek() {
        return deque.peek();
    }
}

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if (nums.length == 1) {
            return nums;
        }
        int len = nums.length - k + 1;
        //存放结果元素的数组
        int[] res = new int[len];
        int num = 0;
        //自定义队列
        MyQueue myQueue = new MyQueue();
        //先将前k的元素放入队列
        for (int i = 0; i &lt; k; i++) {
            myQueue.add(nums[i]);
        }
        res[num++] = myQueue.peek();
        for (int i = k; i &lt; nums.length; i++) {
            //滑动窗口移除最前面的元素，移除是判断该元素是否放入队列
            myQueue.poll(nums[i - k]);
            //滑动窗口加入最后面的元素
            myQueue.add(nums[i]);
            //记录对应的最大值
            res[num++] = myQueue.peek();
        }
        return res;
    }
}

//解法二
//利用双端队列手动实现单调队列
/**
 * 用一个单调队列来存储对应的下标，每当窗口滑动的时候，直接取队列的头部指针对应的值放入结果集即可
 * 单调队列类似 （tail --&gt;） 3 --&gt; 2 --&gt; 1 --&gt; 0 (--&gt; head) (右边为头结点，元素存的是下标)
 */
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        ArrayDeque&lt;Integer&gt; deque = new ArrayDeque&lt;&gt;();
        int n = nums.length;
        int[] res = new int[n - k + 1];
        int idx = 0;
        for(int i = 0; i &lt; n; i++) {
            // 根据题意，i为nums下标，是要在[i - k + 1, i] 中选到最大值，只需要保证两点
            // 1.队列头结点需要在[i - k + 1, i]范围内，不符合则要弹出
            while(!deque.isEmpty() &amp;&amp; deque.peek() &lt; i - k + 1){
                deque.poll();
            }
            // 2.既然是单调，就要保证每次放进去的数字要比末尾的都大，否则也弹出
            while(!deque.isEmpty() &amp;&amp; nums[deque.peekLast()] &lt; nums[i]) {
                deque.pollLast();
            }

            deque.offer(i);

            // 因为单调，当i增长到符合第一个k范围的时候，每滑动一步都将队列头节点放入结果就行了
            if(i &gt;= k - 1){
                res[idx++] = nums[deque.peek()];
            }
        }
        return res;
    }
}"><pre><span class="pl-c">//解法一</span>
<span class="pl-c">//自定义数组</span>
<span class="pl-k">class</span> <span class="pl-smi">MyQueue</span> {
    <span class="pl-smi">Deque</span>&lt;<span class="pl-smi">Integer</span>&gt; <span class="pl-s1">deque</span> = <span class="pl-k">new</span> <span class="pl-smi">LinkedList</span>&lt;&gt;();
    <span class="pl-c">//弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出</span>
    <span class="pl-c">//同时判断队列当前是否为空</span>
    <span class="pl-smi">void</span> <span class="pl-en">poll</span>(<span class="pl-smi">int</span> <span class="pl-s1">val</span>) {
        <span class="pl-k">if</span> (!<span class="pl-s1">deque</span>.<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1">val</span> == <span class="pl-s1">deque</span>.<span class="pl-en">peek</span>()) {
            <span class="pl-s1">deque</span>.<span class="pl-en">poll</span>();
        }
    }
    <span class="pl-c">//添加元素时，如果要添加的元素大于入口处的元素，就将入口元素弹出</span>
    <span class="pl-c">//保证队列元素单调递减</span>
    <span class="pl-c">//比如此时队列元素3,1，2将要入队，比1大，所以1弹出，此时队列：3,2</span>
    <span class="pl-smi">void</span> <span class="pl-en">add</span>(<span class="pl-smi">int</span> <span class="pl-s1">val</span>) {
        <span class="pl-k">while</span> (!<span class="pl-s1">deque</span>.<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1">val</span> &gt; <span class="pl-s1">deque</span>.<span class="pl-en">getLast</span>()) {
            <span class="pl-s1">deque</span>.<span class="pl-en">removeLast</span>();
        }
        <span class="pl-s1">deque</span>.<span class="pl-en">add</span>(<span class="pl-s1">val</span>);
    }
    <span class="pl-c">//队列队顶元素始终为最大值</span>
    <span class="pl-smi">int</span> <span class="pl-en">peek</span>() {
        <span class="pl-k">return</span> <span class="pl-s1">deque</span>.<span class="pl-en">peek</span>();
    }
}

<span class="pl-k">class</span> <span class="pl-smi">Solution</span> {
    <span class="pl-k">public</span> <span class="pl-smi">int</span>[] <span class="pl-en">maxSlidingWindow</span>(<span class="pl-smi">int</span>[] <span class="pl-s1">nums</span>, <span class="pl-smi">int</span> <span class="pl-s1">k</span>) {
        <span class="pl-k">if</span> (<span class="pl-s1">nums</span>.<span class="pl-s1">length</span> == <span class="pl-c1">1</span>) {
            <span class="pl-k">return</span> <span class="pl-s1">nums</span>;
        }
        <span class="pl-smi">int</span> <span class="pl-s1">len</span> = <span class="pl-s1">nums</span>.<span class="pl-s1">length</span> - <span class="pl-s1">k</span> + <span class="pl-c1">1</span>;
        <span class="pl-c">//存放结果元素的数组</span>
        <span class="pl-smi">int</span>[] <span class="pl-s1">res</span> = <span class="pl-k">new</span> <span class="pl-smi">int</span>[<span class="pl-s1">len</span>];
        <span class="pl-smi">int</span> <span class="pl-s1">num</span> = <span class="pl-c1">0</span>;
        <span class="pl-c">//自定义队列</span>
        <span class="pl-smi">MyQueue</span> <span class="pl-s1">myQueue</span> = <span class="pl-k">new</span> <span class="pl-smi">MyQueue</span>();
        <span class="pl-c">//先将前k的元素放入队列</span>
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-c1">0</span>; <span class="pl-s1">i</span> &lt; <span class="pl-s1">k</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-s1">myQueue</span>.<span class="pl-en">add</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>]);
        }
        <span class="pl-s1">res</span>[<span class="pl-s1">num</span>++] = <span class="pl-s1">myQueue</span>.<span class="pl-en">peek</span>();
        <span class="pl-k">for</span> (<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-s1">k</span>; <span class="pl-s1">i</span> &lt; <span class="pl-s1">nums</span>.<span class="pl-s1">length</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-c">//滑动窗口移除最前面的元素，移除是判断该元素是否放入队列</span>
            <span class="pl-s1">myQueue</span>.<span class="pl-en">poll</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span> - <span class="pl-s1">k</span>]);
            <span class="pl-c">//滑动窗口加入最后面的元素</span>
            <span class="pl-s1">myQueue</span>.<span class="pl-en">add</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>]);
            <span class="pl-c">//记录对应的最大值</span>
            <span class="pl-s1">res</span>[<span class="pl-s1">num</span>++] = <span class="pl-s1">myQueue</span>.<span class="pl-en">peek</span>();
        }
        <span class="pl-k">return</span> <span class="pl-s1">res</span>;
    }
}

<span class="pl-c">//解法二</span>
<span class="pl-c">//利用双端队列手动实现单调队列</span>
<span class="pl-c">/**</span>
<span class="pl-c"> * 用一个单调队列来存储对应的下标，每当窗口滑动的时候，直接取队列的头部指针对应的值放入结果集即可</span>
<span class="pl-c"> * 单调队列类似 （tail --&gt;） 3 --&gt; 2 --&gt; 1 --&gt; 0 (--&gt; head) (右边为头结点，元素存的是下标)</span>
<span class="pl-c"> */</span>
<span class="pl-k">class</span> <span class="pl-smi">Solution</span> {
    <span class="pl-k">public</span> <span class="pl-smi">int</span>[] <span class="pl-en">maxSlidingWindow</span>(<span class="pl-smi">int</span>[] <span class="pl-s1">nums</span>, <span class="pl-smi">int</span> <span class="pl-s1">k</span>) {
        <span class="pl-smi">ArrayDeque</span>&lt;<span class="pl-smi">Integer</span>&gt; <span class="pl-s1">deque</span> = <span class="pl-k">new</span> <span class="pl-smi">ArrayDeque</span>&lt;&gt;();
        <span class="pl-smi">int</span> <span class="pl-s1">n</span> = <span class="pl-s1">nums</span>.<span class="pl-s1">length</span>;
        <span class="pl-smi">int</span>[] <span class="pl-s1">res</span> = <span class="pl-k">new</span> <span class="pl-smi">int</span>[<span class="pl-s1">n</span> - <span class="pl-s1">k</span> + <span class="pl-c1">1</span>];
        <span class="pl-smi">int</span> <span class="pl-s1">idx</span> = <span class="pl-c1">0</span>;
        <span class="pl-k">for</span>(<span class="pl-smi">int</span> <span class="pl-s1">i</span> = <span class="pl-c1">0</span>; <span class="pl-s1">i</span> &lt; <span class="pl-s1">n</span>; <span class="pl-s1">i</span>++) {
            <span class="pl-c">// 根据题意，i为nums下标，是要在[i - k + 1, i] 中选到最大值，只需要保证两点</span>
            <span class="pl-c">// 1.队列头结点需要在[i - k + 1, i]范围内，不符合则要弹出</span>
            <span class="pl-k">while</span>(!<span class="pl-s1">deque</span>.<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1">deque</span>.<span class="pl-en">peek</span>() &lt; <span class="pl-s1">i</span> - <span class="pl-s1">k</span> + <span class="pl-c1">1</span>){
                <span class="pl-s1">deque</span>.<span class="pl-en">poll</span>();
            }
            <span class="pl-c">// 2.既然是单调，就要保证每次放进去的数字要比末尾的都大，否则也弹出</span>
            <span class="pl-k">while</span>(!<span class="pl-s1">deque</span>.<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1">nums</span>[<span class="pl-s1">deque</span>.<span class="pl-en">peekLast</span>()] &lt; <span class="pl-s1">nums</span>[<span class="pl-s1">i</span>]) {
                <span class="pl-s1">deque</span>.<span class="pl-en">pollLast</span>();
            }

            <span class="pl-s1">deque</span>.<span class="pl-en">offer</span>(<span class="pl-s1">i</span>);

            <span class="pl-c">// 因为单调，当i增长到符合第一个k范围的时候，每滑动一步都将队列头节点放入结果就行了</span>
            <span class="pl-k">if</span>(<span class="pl-s1">i</span> &gt;= <span class="pl-s1">k</span> - <span class="pl-c1">1</span>){
                <span class="pl-s1">res</span>[<span class="pl-s1">idx</span>++] = <span class="pl-s1">nums</span>[<span class="pl-s1">deque</span>.<span class="pl-en">peek</span>()];
            }
        }
        <span class="pl-k">return</span> <span class="pl-s1">res</span>;
    }
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Python：</h3><a id="user-content-python" class="anchor" aria-label="Permalink: Python：" href="#python"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from collections import deque


class MyQueue: #单调队列（从大到小
    def __init__(self):
        self.queue = deque() #这里需要使用deque实现单调队列，直接使用list会超时
    
    #每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。
    #同时pop之前判断队列当前是否为空。
    def pop(self, value):
        if self.queue and value == self.queue[0]:
            self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()
            
    #如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。
    #这样就保持了队列里的数值是单调从大到小的了。
    def push(self, value):
        while self.queue and value &gt; self.queue[-1]:
            self.queue.pop()
        self.queue.append(value)
        
    #查询当前队列里的最大值 直接返回队列前端也就是front就可以了。
    def front(self):
        return self.queue[0]
    
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -&gt; List[int]:
        que = MyQueue()
        result = []
        for i in range(k): #先将前k的元素放进队列
            que.push(nums[i])
        result.append(que.front()) #result 记录前k的元素的最大值
        for i in range(k, len(nums)):
            que.pop(nums[i - k]) #滑动窗口移除最前面元素
            que.push(nums[i]) #滑动窗口前加入最后面的元素
            result.append(que.front()) #记录对应的最大值
        return result"><pre><span class="pl-k">from</span> <span class="pl-s1">collections</span> <span class="pl-k">import</span> <span class="pl-s1">deque</span>


<span class="pl-k">class</span> <span class="pl-v">MyQueue</span>: <span class="pl-c">#单调队列（从大到小</span>
    <span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>):
        <span class="pl-s1">self</span>.<span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-en">deque</span>() <span class="pl-c">#这里需要使用deque实现单调队列，直接使用list会超时</span>
    
    <span class="pl-c">#每次弹出的时候，比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。</span>
    <span class="pl-c">#同时pop之前判断队列当前是否为空。</span>
    <span class="pl-k">def</span> <span class="pl-en">pop</span>(<span class="pl-s1">self</span>, <span class="pl-s1">value</span>):
        <span class="pl-k">if</span> <span class="pl-s1">self</span>.<span class="pl-c1">queue</span> <span class="pl-c1">and</span> <span class="pl-s1">value</span> <span class="pl-c1">==</span> <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>[<span class="pl-c1">0</span>]:
            <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>.<span class="pl-c1">popleft</span>()<span class="pl-c">#list.pop()时间复杂度为O(n),这里需要使用collections.deque()</span>
            
    <span class="pl-c">#如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。</span>
    <span class="pl-c">#这样就保持了队列里的数值是单调从大到小的了。</span>
    <span class="pl-k">def</span> <span class="pl-en">push</span>(<span class="pl-s1">self</span>, <span class="pl-s1">value</span>):
        <span class="pl-k">while</span> <span class="pl-s1">self</span>.<span class="pl-c1">queue</span> <span class="pl-c1">and</span> <span class="pl-s1">value</span> <span class="pl-c1">&gt;</span> <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>[<span class="pl-c1">-</span><span class="pl-c1">1</span>]:
            <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>.<span class="pl-c1">pop</span>()
        <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>.<span class="pl-c1">append</span>(<span class="pl-s1">value</span>)
        
    <span class="pl-c">#查询当前队列里的最大值 直接返回队列前端也就是front就可以了。</span>
    <span class="pl-k">def</span> <span class="pl-en">front</span>(<span class="pl-s1">self</span>):
        <span class="pl-k">return</span> <span class="pl-s1">self</span>.<span class="pl-c1">queue</span>[<span class="pl-c1">0</span>]
    
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">maxSlidingWindow</span>(<span class="pl-s1">self</span>, <span class="pl-s1">nums</span>: <span class="pl-v">List</span>[<span class="pl-smi">int</span>], <span class="pl-s1">k</span>: <span class="pl-smi">int</span>) <span class="pl-c1">-&gt;</span> <span class="pl-v">List</span>[<span class="pl-smi">int</span>]:
        <span class="pl-s1">que</span> <span class="pl-c1">=</span> <span class="pl-en">MyQueue</span>()
        <span class="pl-s1">result</span> <span class="pl-c1">=</span> []
        <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">k</span>): <span class="pl-c">#先将前k的元素放进队列</span>
            <span class="pl-s1">que</span>.<span class="pl-c1">push</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>])
        <span class="pl-s1">result</span>.<span class="pl-c1">append</span>(<span class="pl-s1">que</span>.<span class="pl-c1">front</span>()) <span class="pl-c">#result 记录前k的元素的最大值</span>
        <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-s1">k</span>, <span class="pl-en">len</span>(<span class="pl-s1">nums</span>)):
            <span class="pl-s1">que</span>.<span class="pl-c1">pop</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span> <span class="pl-c1">-</span> <span class="pl-s1">k</span>]) <span class="pl-c">#滑动窗口移除最前面元素</span>
            <span class="pl-s1">que</span>.<span class="pl-c1">push</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>]) <span class="pl-c">#滑动窗口前加入最后面的元素</span>
            <span class="pl-s1">result</span>.<span class="pl-c1">append</span>(<span class="pl-s1">que</span>.<span class="pl-c1">front</span>()) <span class="pl-c">#记录对应的最大值</span>
        <span class="pl-k">return</span> <span class="pl-s1">result</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Go：</h3><a id="user-content-go" class="anchor" aria-label="Permalink: Go：" href="#go"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 封装单调队列的方式解题
type MyQueue struct {
    queue []int
}

func NewMyQueue() *MyQueue {
    return &amp;MyQueue{
        queue: make([]int, 0),
    }
}

func (m *MyQueue) Front() int {
    return m.queue[0]
}

func (m *MyQueue) Back() int {
    return m.queue[len(m.queue)-1]
}

func (m *MyQueue) Empty() bool {
    return len(m.queue) == 0
}

func (m *MyQueue) Push(val int) {
    for !m.Empty() &amp;&amp; val &gt; m.Back() {
        m.queue = m.queue[:len(m.queue)-1]
    }
    m.queue = append(m.queue, val)
}

func (m *MyQueue) Pop(val int) {
    if !m.Empty() &amp;&amp; val == m.Front() {
        m.queue = m.queue[1:]
    }
}

func maxSlidingWindow(nums []int, k int) []int {
    queue := NewMyQueue()
    length := len(nums)
    res := make([]int, 0)
    // 先将前k个元素放入队列
    for i := 0; i &lt; k; i++ {
        queue.Push(nums[i])
    }
    // 记录前k个元素的最大值
    res = append(res, queue.Front())

    for i := k; i &lt; length; i++ {
        // 滑动窗口移除最前面的元素
        queue.Pop(nums[i-k])
        // 滑动窗口添加最后面的元素
        queue.Push(nums[i])
        // 记录最大值
        res = append(res, queue.Front())
    }
    return res
}"><pre><span class="pl-c">// 封装单调队列的方式解题</span>
<span class="pl-k">type</span> <span class="pl-smi">MyQueue</span> <span class="pl-k">struct</span> {
    <span class="pl-c1">queue</span> []<span class="pl-smi">int</span>
}

<span class="pl-k">func</span> <span class="pl-s1">NewMyQueue</span>() <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span> {
    <span class="pl-k">return</span> <span class="pl-c1">&amp;</span><span class="pl-smi">MyQueue</span>{
        <span class="pl-s1">queue</span>: <span class="pl-s1">make</span>([]<span class="pl-smi">int</span>, <span class="pl-c1">0</span>),
    }
}

<span class="pl-k">func</span> (<span class="pl-s1">m</span> <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span>) <span class="pl-c1">Front</span>() <span class="pl-smi">int</span> {
    <span class="pl-k">return</span> <span class="pl-s1">m</span>.<span class="pl-c1">queue</span>[<span class="pl-c1">0</span>]
}

<span class="pl-k">func</span> (<span class="pl-s1">m</span> <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span>) <span class="pl-c1">Back</span>() <span class="pl-smi">int</span> {
    <span class="pl-k">return</span> <span class="pl-s1">m</span>.<span class="pl-c1">queue</span>[<span class="pl-s1">len</span>(<span class="pl-s1">m</span>.<span class="pl-c1">queue</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
}

<span class="pl-k">func</span> (<span class="pl-s1">m</span> <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span>) <span class="pl-c1">Empty</span>() <span class="pl-smi">bool</span> {
    <span class="pl-k">return</span> <span class="pl-s1">len</span>(<span class="pl-s1">m</span>.<span class="pl-c1">queue</span>) <span class="pl-c1">==</span> <span class="pl-c1">0</span>
}

<span class="pl-k">func</span> (<span class="pl-s1">m</span> <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span>) <span class="pl-c1">Push</span>(<span class="pl-s1">val</span> <span class="pl-smi">int</span>) {
    <span class="pl-k">for</span> <span class="pl-c1">!</span><span class="pl-s1">m</span>.<span class="pl-c1">Empty</span>() <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">val</span> <span class="pl-c1">&gt;</span> <span class="pl-s1">m</span>.<span class="pl-c1">Back</span>() {
        <span class="pl-s1">m</span>.<span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-s1">m</span>.<span class="pl-c1">queue</span>[:<span class="pl-s1">len</span>(<span class="pl-s1">m</span>.<span class="pl-c1">queue</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
    }
    <span class="pl-s1">m</span>.<span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">m</span>.<span class="pl-c1">queue</span>, <span class="pl-s1">val</span>)
}

<span class="pl-k">func</span> (<span class="pl-s1">m</span> <span class="pl-c1">*</span><span class="pl-smi">MyQueue</span>) <span class="pl-c1">Pop</span>(<span class="pl-s1">val</span> <span class="pl-smi">int</span>) {
    <span class="pl-k">if</span> <span class="pl-c1">!</span><span class="pl-s1">m</span>.<span class="pl-c1">Empty</span>() <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">val</span> <span class="pl-c1">==</span> <span class="pl-s1">m</span>.<span class="pl-c1">Front</span>() {
        <span class="pl-s1">m</span>.<span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-s1">m</span>.<span class="pl-c1">queue</span>[<span class="pl-c1">1</span>:]
    }
}

<span class="pl-k">func</span> <span class="pl-s1">maxSlidingWindow</span>(<span class="pl-s1">nums</span> []<span class="pl-smi">int</span>, <span class="pl-s1">k</span> <span class="pl-smi">int</span>) []<span class="pl-smi">int</span> {
    <span class="pl-s1">queue</span> <span class="pl-c1">:=</span> <span class="pl-s1">NewMyQueue</span>()
    <span class="pl-s1">length</span> <span class="pl-c1">:=</span> <span class="pl-s1">len</span>(<span class="pl-s1">nums</span>)
    <span class="pl-s1">res</span> <span class="pl-c1">:=</span> <span class="pl-s1">make</span>([]<span class="pl-smi">int</span>, <span class="pl-c1">0</span>)
    <span class="pl-c">// 先将前k个元素放入队列</span>
    <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">:=</span> <span class="pl-c1">0</span>; <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">k</span>; <span class="pl-s1">i</span><span class="pl-c1">++</span> {
        <span class="pl-s1">queue</span>.<span class="pl-c1">Push</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>])
    }
    <span class="pl-c">// 记录前k个元素的最大值</span>
    <span class="pl-s1">res</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">res</span>, <span class="pl-s1">queue</span>.<span class="pl-c1">Front</span>())

    <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">:=</span> <span class="pl-s1">k</span>; <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">length</span>; <span class="pl-s1">i</span><span class="pl-c1">++</span> {
        <span class="pl-c">// 滑动窗口移除最前面的元素</span>
        <span class="pl-s1">queue</span>.<span class="pl-c1">Pop</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-s1">k</span>])
        <span class="pl-c">// 滑动窗口添加最后面的元素</span>
        <span class="pl-s1">queue</span>.<span class="pl-c1">Push</span>(<span class="pl-s1">nums</span>[<span class="pl-s1">i</span>])
        <span class="pl-c">// 记录最大值</span>
        <span class="pl-s1">res</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">res</span>, <span class="pl-s1">queue</span>.<span class="pl-c1">Front</span>())
    }
    <span class="pl-k">return</span> <span class="pl-s1">res</span>
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Javascript:</h3><a id="user-content-javascript" class="anchor" aria-label="Permalink: Javascript:" href="#javascript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var maxSlidingWindow = function (nums, k) {
    class MonoQueue {
        queue;
        constructor() {
            this.queue = [];
        }
        enqueue(value) {
            let back = this.queue[this.queue.length - 1];
            while (back !== undefined &amp;&amp; back &lt; value) {
                this.queue.pop();
                back = this.queue[this.queue.length - 1];
            }
            this.queue.push(value);
        }
        dequeue(value) {
            let front = this.front();
            if (front === value) {
                this.queue.shift();
            }
        }
        front() {
            return this.queue[0];
        }
    }
    let helperQueue = new MonoQueue();
    let i = 0, j = 0;
    let resArr = [];
    while (j &lt; k) {
        helperQueue.enqueue(nums[j++]);
    }
    resArr.push(helperQueue.front());
    while (j &lt; nums.length) {
        helperQueue.enqueue(nums[j]);
        helperQueue.dequeue(nums[i]);
        resArr.push(helperQueue.front());
        i++, j++;
    }
    return resArr;
};"><pre><span class="pl-c">/**</span>
<span class="pl-c"> * <span class="pl-k">@param</span> {<span class="pl-smi">number[]</span>} nums</span>
<span class="pl-c"> * <span class="pl-k">@param</span> {<span class="pl-smi">number</span>} k</span>
<span class="pl-c"> * <span class="pl-k">@return</span> {<span class="pl-smi">number[]</span>}</span>
<span class="pl-c"> */</span>
<span class="pl-k">var</span> <span class="pl-en">maxSlidingWindow</span> <span class="pl-c1">=</span> <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">,</span> <span class="pl-s1">k</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-k">class</span> <span class="pl-v">MonoQueue</span> <span class="pl-kos">{</span>
        <span class="pl-c1">queue</span><span class="pl-kos">;</span>
        <span class="pl-en">constructor</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
        <span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">back</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
            <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">back</span> <span class="pl-c1">!==</span> <span class="pl-c1">undefined</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">back</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                <span class="pl-s1">back</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
            <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
        <span class="pl-en">dequeue</span><span class="pl-kos">(</span><span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">front</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">front</span> <span class="pl-c1">===</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">shift</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
        <span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">return</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">let</span> <span class="pl-s1">helperQueue</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-v">MonoQueue</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">j</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">resArr</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">k</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-s1">resArr</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">nums</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">dequeue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">resArr</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">,</span> <span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">resArr</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">TypeScript：</h3><a id="user-content-typescript" class="anchor" aria-label="Permalink: TypeScript：" href="#typescript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="function maxSlidingWindow(nums: number[], k: number): number[] {
    /** 单调递减队列 */
    class MonoQueue {
        private queue: number[];
        constructor() {
            this.queue = [];
        };
        /** 入队：value如果大于队尾元素，则将队尾元素删除，直至队尾元素大于value，或者队列为空 */
        public enqueue(value: number): void {
            let back: number | undefined = this.queue[this.queue.length - 1];
            while (back !== undefined &amp;&amp; back &lt; value) {
                this.queue.pop();
                back = this.queue[this.queue.length - 1];
            }
            this.queue.push(value);
        };
        /** 出队：只有当队头元素等于value，才出队 */
        public dequeue(value: number): void {
            let top: number | undefined = this.top();
            if (top !== undefined &amp;&amp; top === value) {
                this.queue.shift();
            }
        }
        public top(): number | undefined {
            return this.queue[0];
        }
    }
    const helperQueue: MonoQueue = new MonoQueue();
    let i: number = 0,
        j: number = 0;
    let resArr: number[] = [];
    while (j &lt; k) {
        helperQueue.enqueue(nums[j++]);
    }
    resArr.push(helperQueue.top()!);
    while (j &lt; nums.length) {
        helperQueue.enqueue(nums[j]);
        helperQueue.dequeue(nums[i]);
        resArr.push(helperQueue.top()!);
        j++, i++;
    }
    return resArr;
};"><pre><span class="pl-k">function</span> <span class="pl-en">maxSlidingWindow</span><span class="pl-kos">(</span><span class="pl-s1">nums</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-s1">k</span>: <span class="pl-smi">number</span><span class="pl-kos">)</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span>
    <span class="pl-c">/** 单调递减队列 */</span>
    <span class="pl-k">class</span> <span class="pl-smi">MonoQueue</span> <span class="pl-kos">{</span>
        <span class="pl-k">private</span> <span class="pl-c1">queue</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-en">constructor</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span><span class="pl-kos">;</span>
        <span class="pl-c">/** 入队：value如果大于队尾元素，则将队尾元素删除，直至队尾元素大于value，或者队列为空 */</span>
        <span class="pl-k">public</span> <span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">value</span>: <span class="pl-smi">number</span><span class="pl-kos">)</span>: <span class="pl-smi"><span class="pl-k">void</span></span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">back</span>: <span class="pl-smi">number</span> <span class="pl-c1">|</span> <span class="pl-c1">undefined</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
            <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">back</span> <span class="pl-c1">!==</span> <span class="pl-c1">undefined</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">back</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                <span class="pl-s1">back</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
            <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span><span class="pl-kos">;</span>
        <span class="pl-c">/** 出队：只有当队头元素等于value，才出队 */</span>
        <span class="pl-k">public</span> <span class="pl-en">dequeue</span><span class="pl-kos">(</span><span class="pl-s1">value</span>: <span class="pl-smi">number</span><span class="pl-kos">)</span>: <span class="pl-smi"><span class="pl-k">void</span></span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">top</span>: <span class="pl-smi">number</span> <span class="pl-c1">|</span> <span class="pl-c1">undefined</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-en">top</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">top</span> <span class="pl-c1">!==</span> <span class="pl-c1">undefined</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">top</span> <span class="pl-c1">===</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">.</span><span class="pl-en">shift</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
        <span class="pl-k">public</span> <span class="pl-en">top</span><span class="pl-kos">(</span><span class="pl-kos">)</span>: <span class="pl-smi">number</span> <span class="pl-c1">|</span> <span class="pl-c1">undefined</span> <span class="pl-kos">{</span>
            <span class="pl-k">return</span> <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">queue</span><span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">const</span> <span class="pl-s1">helperQueue</span>: <span class="pl-smi">MonoQueue</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-v">MonoQueue</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">i</span>: <span class="pl-smi">number</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span>
        <span class="pl-s1">j</span>: <span class="pl-smi">number</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">resArr</span>: <span class="pl-smi">number</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">k</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-s1">resArr</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">top</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">nums</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">j</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">dequeue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">resArr</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">top</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">j</span><span class="pl-c1">++</span><span class="pl-kos">,</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">resArr</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Swift:</h3><a id="user-content-swift" class="anchor" aria-label="Permalink: Swift:" href="#swift"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">解法一:</p>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="/// 双向链表
class DoublyListNode {
    var head: DoublyListNode?
    var tail: DoublyListNode?
    var next: DoublyListNode?
    var pre: DoublyListNode?
    var value: Int = 0
    init(_ value: Int = 0) {
        self.value = value
    }
    func isEmpty() -&gt; Bool {
        return self.head == nil
    }
    func first() -&gt; Int? {
        return self.head?.value
    }
    func last() -&gt; Int? {
        return self.tail?.value
    }
    func removeFirst() {
        if isEmpty() {
            return
        }
        let next = self.head!.next
        self.head?.next = nil// 移除首节点
        next?.pre = nil
        self.head = next
    }
    func removeLast() {
        if let tail = self.tail {
            if let pre = tail.pre {
                self.tail?.pre = nil
                pre.next = nil
                self.tail = pre
            } else {
                self.head = nil
                self.tail = nil
            }
        }
    }
    func append(_ value: Int) {
        let node = DoublyListNode(value)
        if self.head != nil {
            node.pre = self.tail
            self.tail?.next = node
            self.tail = node
        } else {
            self.head = node
            self.tail = node
            self.pre = nil
            self.next = nil
        }
    }
}
// 单调队列, 从大到小
class MyQueue {
//    var queue: [Int]!// 用数组会超时
    var queue: DoublyListNode!
    init() {
//        queue = [Int]()
        queue = DoublyListNode()
    }
    // 滑动窗口时弹出第一个元素, 如果相等再弹出
    func pop(x: Int) {
        if !queue.isEmpty() &amp;&amp; front() == x {
            queue.removeFirst()
        }
    }
    // 滑动窗口时添加下一个元素, 移除队尾比 x 小的元素 始终保证队头 &gt; 队尾
    func push(x: Int) {
        while !queue.isEmpty() &amp;&amp; queue.last()! &lt; x {
            queue.removeLast()
        }
        queue.append(x)
    }
    // 此时队头就是滑动窗口最大值
    func front() -&gt; Int {
        return queue.first() ?? -1
    }
}

class Solution {
    func maxSlidingWindow(_ nums: [Int], _ k: Int) -&gt; [Int] {
        // 存放结果
        var res = [Int]()
        let queue = MyQueue()
        // 先将前K个元素放入队列
        for i in 0 ..&lt; k {
            queue.push(x: nums[i])
        }
        // 添加当前队列最大值到结果数组
        res.append(queue.front())
        for i in k ..&lt; nums.count {
            // 滑动窗口移除最前面元素
            queue.pop(x: nums[i - k])
            // 滑动窗口添加下一个元素
            queue.push(x: nums[i])
            // 保存当前队列最大值
            res.append(queue.front())
        }
        return res
    }
}"><pre>/// 双向链表
<span class="pl-k">class</span> <span class="pl-smi">DoublyListNode</span> <span class="pl-kos">{</span>
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">head</span></span><span class="pl-kos">:</span> <span class="pl-smi">DoublyListNode</span><span class="pl-c1"><span class="pl-c1">?</span></span>
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">tail</span></span><span class="pl-kos">:</span> <span class="pl-smi">DoublyListNode</span><span class="pl-c1"><span class="pl-c1">?</span></span>
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">next</span></span><span class="pl-kos">:</span> <span class="pl-smi">DoublyListNode</span><span class="pl-c1"><span class="pl-c1">?</span></span>
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">pre</span></span><span class="pl-kos">:</span> <span class="pl-smi">DoublyListNode</span><span class="pl-c1"><span class="pl-c1">?</span></span>
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">value</span></span><span class="pl-kos">:</span> <span class="pl-smi">Int</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span>
    <span class="pl-v">init</span><span class="pl-kos">(</span>_ value<span class="pl-kos">:</span> <span class="pl-smi">Int</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-smi">self</span><span class="pl-kos">.</span>value <span class="pl-c1">=</span> value
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> isEmpty<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">Bool</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>head <span class="pl-c1">==</span> <span class="pl-smi">nil</span>
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> first<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">Int</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>head<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>value
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> last<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">Int</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>tail<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>value
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> removeFirst<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">if</span> <span class="pl-en">isEmpty</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">return</span>
        <span class="pl-kos">}</span>
        <span class="pl-k">let</span> <span class="pl-s1">next</span> <span class="pl-c1">=</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>head!<span class="pl-kos">.</span>next
        <span class="pl-smi">self</span><span class="pl-kos">.</span>head<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>next <span class="pl-c1">=</span> <span class="pl-smi">nil</span>// 移除首节点
        next<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>pre <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
        <span class="pl-smi">self</span><span class="pl-kos">.</span>head <span class="pl-c1">=</span> next
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> removeLast<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">if</span> <span class="pl-k">let</span> tail <span class="pl-c1">=</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>tail <span class="pl-kos">{</span>
            <span class="pl-k">if</span> <span class="pl-k">let</span> pre <span class="pl-c1">=</span> tail<span class="pl-kos">.</span>pre <span class="pl-kos">{</span>
                <span class="pl-smi">self</span><span class="pl-kos">.</span>tail<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>pre <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
                pre<span class="pl-kos">.</span>next <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
                <span class="pl-smi">self</span><span class="pl-kos">.</span>tail <span class="pl-c1">=</span> pre
            <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
                <span class="pl-smi">self</span><span class="pl-kos">.</span>head <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
                <span class="pl-smi">self</span><span class="pl-kos">.</span>tail <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-en">func</span> append<span class="pl-kos">(</span>_ value<span class="pl-kos">:</span> <span class="pl-smi">Int</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-en">DoublyListNode</span><span class="pl-kos">(</span>value<span class="pl-kos">)</span>
        <span class="pl-k">if</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>head <span class="pl-c1">!=</span> <span class="pl-smi">nil</span> <span class="pl-kos">{</span>
            node<span class="pl-kos">.</span>pre <span class="pl-c1">=</span> <span class="pl-smi">self</span><span class="pl-kos">.</span>tail
            <span class="pl-smi">self</span><span class="pl-kos">.</span>tail<span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">.</span>next <span class="pl-c1">=</span> node
            <span class="pl-smi">self</span><span class="pl-kos">.</span>tail <span class="pl-c1">=</span> node
        <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
            <span class="pl-smi">self</span><span class="pl-kos">.</span>head <span class="pl-c1">=</span> node
            <span class="pl-smi">self</span><span class="pl-kos">.</span>tail <span class="pl-c1">=</span> node
            <span class="pl-smi">self</span><span class="pl-kos">.</span>pre <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
            <span class="pl-smi">self</span><span class="pl-kos">.</span>next <span class="pl-c1">=</span> <span class="pl-smi">nil</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span>
// 单调队列, 从大到小
<span class="pl-k">class</span> <span class="pl-smi">MyQueue</span> <span class="pl-kos">{</span>
//    var queue: [Int]!// 用数组会超时
    <span class="pl-k">var</span> <span class="pl-s1"><span class="pl-c1">queue</span></span><span class="pl-kos">:</span> <span class="pl-smi">DoublyListNode</span><span class="pl-c1">!</span>
    <span class="pl-v">init</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
//        queue = [Int]()
        queue <span class="pl-c1">=</span> <span class="pl-en">DoublyListNode</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
    <span class="pl-kos">}</span>
    // 滑动窗口时弹出第一个元素, 如果相等再弹出
    <span class="pl-en">func</span> pop<span class="pl-kos">(</span>x<span class="pl-kos">:</span> <span class="pl-smi">Int</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">if</span> !queue<span class="pl-kos">.</span><span class="pl-en">isEmpty</span><span class="pl-kos">(</span><span class="pl-kos">)</span> &amp;&amp; <span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">==</span> x <span class="pl-kos">{</span>
            queue<span class="pl-kos">.</span><span class="pl-en">removeFirst</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    // 滑动窗口时添加下一个元素, 移除队尾比 x 小的元素 始终保证队头 &gt; 队尾
    <span class="pl-en">func</span> push<span class="pl-kos">(</span>x<span class="pl-kos">:</span> <span class="pl-smi">Int</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">while</span> !queue<span class="pl-kos">.</span><span class="pl-en">isEmpty</span><span class="pl-kos">(</span><span class="pl-kos">)</span> &amp;&amp; queue<span class="pl-kos">.</span><span class="pl-en">last</span><span class="pl-kos">(</span><span class="pl-kos">)</span>! <span class="pl-c1">&lt;</span> x <span class="pl-kos">{</span>
            queue<span class="pl-kos">.</span><span class="pl-en">removeLast</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
        queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>x<span class="pl-kos">)</span>
    <span class="pl-kos">}</span>
    // 此时队头就是滑动窗口最大值
    <span class="pl-en">func</span> front<span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">Int</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> queue<span class="pl-kos">.</span><span class="pl-en">first</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">??</span> <span class="pl-c1">-</span><span class="pl-c1">1</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span>

<span class="pl-k">class</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
    <span class="pl-en">func</span> maxSlidingWindow<span class="pl-kos">(</span>_ nums<span class="pl-kos">:</span> <span class="pl-kos">[</span><span class="pl-smi">Int</span><span class="pl-kos">]</span><span class="pl-kos">,</span> _ k<span class="pl-kos">:</span> <span class="pl-smi">Int</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-kos">[</span><span class="pl-smi">Int</span><span class="pl-kos">]</span> <span class="pl-kos">{</span>
        // 存放结果
        <span class="pl-k">var</span> <span class="pl-s1">res</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>Int<span class="pl-kos">]</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-k">let</span> <span class="pl-s1">queue</span> <span class="pl-c1">=</span> <span class="pl-en">MyQueue</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        // 先将前K个元素放入队列
        <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-k">in</span> <span class="pl-c1">0</span> <span class="pl-c1">..&lt;</span> k <span class="pl-kos">{</span>
            queue<span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span>x<span class="pl-kos">:</span> <span class="pl-en">nums</span><span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
        // 添加当前队列最大值到结果数组
        res<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>queue<span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
        <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-k">in</span> k <span class="pl-c1">..&lt;</span> nums<span class="pl-kos">.</span>count <span class="pl-kos">{</span>
            // 滑动窗口移除最前面元素
            queue<span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span>x<span class="pl-kos">:</span> <span class="pl-en">nums</span><span class="pl-kos">[</span>i <span class="pl-c1">-</span> k<span class="pl-kos">]</span><span class="pl-kos">)</span>
            // 滑动窗口添加下一个元素
            queue<span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span>x<span class="pl-kos">:</span> <span class="pl-en">nums</span><span class="pl-kos">[</span>i<span class="pl-kos">]</span><span class="pl-kos">)</span>
            // 保存当前队列最大值
            res<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>queue<span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
        <span class="pl-k">return</span> res
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">Swift解法二：</p>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func maxSlidingWindow(_ nums: [Int], _ k: Int) -&gt; [Int] {
    var result = [Int]()
    var window = [Int]()
    var right = 0, left = right - k + 1

    while right &lt; nums.count {
        let value = nums[right]

        // 因为窗口移动丢弃的左边数
        if left &gt; 0, left - 1 == window.first {
            window.removeFirst()
        }

        // 保证末尾的是最大的
        while !window.isEmpty, value &gt; nums[window.last!] {
            window.removeLast()
        }
        window.append(right)

        if left &gt;= 0 { // 窗口形成
            result.append(nums[window.first!])
        }

        right += 1
        left += 1
    }

    return result
}"><pre><span class="pl-en">func</span> maxSlidingWindow<span class="pl-kos">(</span>_ nums<span class="pl-kos">:</span> <span class="pl-kos">[</span><span class="pl-smi">Int</span><span class="pl-kos">]</span><span class="pl-kos">,</span> _ k<span class="pl-kos">:</span> <span class="pl-smi">Int</span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-kos">[</span><span class="pl-smi">Int</span><span class="pl-kos">]</span> <span class="pl-kos">{</span>
    <span class="pl-k">var</span> <span class="pl-s1">result</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>Int<span class="pl-kos">]</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
    <span class="pl-k">var</span> <span class="pl-s1">window</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>Int<span class="pl-kos">]</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
    <span class="pl-k">var</span> <span class="pl-s1">right</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">left</span> <span class="pl-c1">=</span> right <span class="pl-c1">-</span> k <span class="pl-c1">+</span> <span class="pl-c1">1</span>

    <span class="pl-k">while</span> right <span class="pl-c1">&lt;</span> nums<span class="pl-kos">.</span>count <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-en">nums</span><span class="pl-kos">[</span>right<span class="pl-kos">]</span>

        // 因为窗口移动丢弃的左边数
        <span class="pl-k">if</span> left <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> left <span class="pl-c1">-</span> <span class="pl-c1">1</span> <span class="pl-c1">==</span> window<span class="pl-kos">.</span>first <span class="pl-kos">{</span>
            window<span class="pl-kos">.</span><span class="pl-en">removeFirst</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>

        // 保证末尾的是最大的
        <span class="pl-k">while</span> !window<span class="pl-kos">.</span>isEmpty<span class="pl-kos">,</span> value <span class="pl-c1">&gt;</span> <span class="pl-en">nums</span><span class="pl-kos">[</span>window<span class="pl-kos">.</span>last!<span class="pl-kos">]</span> <span class="pl-kos">{</span>
            window<span class="pl-kos">.</span><span class="pl-en">removeLast</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
        window<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>right<span class="pl-kos">)</span>

        <span class="pl-k">if</span> left <span class="pl-c1">&gt;=</span> <span class="pl-c1">0</span> <span class="pl-kos">{</span> // 窗口形成
            result<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span><span class="pl-en">nums</span><span class="pl-kos">[</span>window<span class="pl-kos">.</span>first!<span class="pl-kos">]</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span>

        right <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
        left <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
    <span class="pl-kos">}</span>

    <span class="pl-k">return</span> result
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Scala:</h3><a id="user-content-scala" class="anchor" aria-label="Permalink: Scala:" href="#scala"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-scala notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import scala.collection.mutable.ArrayBuffer
object Solution {
  def maxSlidingWindow(nums: Array[Int], k: Int): Array[Int] = {
    var len = nums.length - k + 1   // 滑动窗口长度
    var res: Array[Int] = new Array[Int](len)   // 声明存储结果的数组
    var index = 0   // 结果数组指针
    val queue: MyQueue = new MyQueue    // 自定义队列
    // 将前k个添加到queue
    for (i &lt;- 0 until k) {
      queue.add(nums(i))
    }
    res(index) = queue.peek // 第一个滑动窗口的最大值
    index += 1
    for (i &lt;- k until nums.length) {
      queue.poll(nums(i - k))   // 首先移除第i-k个元素
      queue.add(nums(i))        // 添加当前数字到队列
      res(index) = queue.peek() // 赋值
      index+=1
    }
    // 最终返回res，return关键字可以省略
    res
  }
 }

class MyQueue {
  var queue = ArrayBuffer[Int]()

  // 移除元素，如果传递进来的跟队头相等，那么移除
  def poll(value: Int): Unit = {
    if (!queue.isEmpty &amp;&amp; queue.head == value) {
      queue.remove(0)
    }
  }

  // 添加元素，当队尾大于当前元素就删除
  def add(value: Int): Unit = {
    while (!queue.isEmpty &amp;&amp; value &gt; queue.last) {
      queue.remove(queue.length - 1)
    }
    queue.append(value)
  }

  def peek(): Int = queue.head
}"><pre><span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">collection</span>.<span class="pl-en">mutable</span>.<span class="pl-en">ArrayBuffer</span>
<span class="pl-k">object</span> <span class="pl-en">Solution</span> {
  <span class="pl-k">def</span> <span class="pl-en">maxSlidingWindow</span>(<span class="pl-v">nums</span>: <span class="pl-en">Array</span>[<span class="pl-en">Int</span>], <span class="pl-v">k</span>: <span class="pl-en">Int</span>)<span class="pl-k">:</span> <span class="pl-en">Array</span>[<span class="pl-en">Int</span>] <span class="pl-k">=</span> {
    <span class="pl-k">var</span> <span class="pl-v">len</span> <span class="pl-k">=</span> nums.length <span class="pl-k">-</span> k <span class="pl-k">+</span> <span class="pl-c1">1</span>   <span class="pl-c"><span class="pl-c">//</span> 滑动窗口长度</span>
    <span class="pl-k">var</span> <span class="pl-v">res</span><span class="pl-k">:</span> <span class="pl-en">Array</span>[<span class="pl-en">Int</span>] <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Array</span>[<span class="pl-en">Int</span>](len)   <span class="pl-c"><span class="pl-c">//</span> 声明存储结果的数组</span>
    <span class="pl-k">var</span> <span class="pl-v">index</span> <span class="pl-k">=</span> <span class="pl-c1">0</span>   <span class="pl-c"><span class="pl-c">//</span> 结果数组指针</span>
    <span class="pl-k">val</span> <span class="pl-v">queue</span><span class="pl-k">:</span> <span class="pl-en">MyQueue</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">MyQueue</span>    <span class="pl-c"><span class="pl-c">//</span> 自定义队列</span>
    <span class="pl-c"><span class="pl-c">//</span> 将前k个添加到queue</span>
    <span class="pl-k">for</span> (i <span class="pl-k">&lt;-</span> <span class="pl-c1">0</span> until k) {
      queue.add(nums(i))
    }
    res(index) <span class="pl-k">=</span> queue.peek <span class="pl-c"><span class="pl-c">//</span> 第一个滑动窗口的最大值</span>
    index <span class="pl-k">+=</span> <span class="pl-c1">1</span>
    <span class="pl-k">for</span> (i <span class="pl-k">&lt;-</span> k until nums.length) {
      queue.poll(nums(i <span class="pl-k">-</span> k))   <span class="pl-c"><span class="pl-c">//</span> 首先移除第i-k个元素</span>
      queue.add(nums(i))        <span class="pl-c"><span class="pl-c">//</span> 添加当前数字到队列</span>
      res(index) <span class="pl-k">=</span> queue.peek() <span class="pl-c"><span class="pl-c">//</span> 赋值</span>
      index<span class="pl-k">+=</span><span class="pl-c1">1</span>
    }
    <span class="pl-c"><span class="pl-c">//</span> 最终返回res，return关键字可以省略</span>
    res
  }
 }

<span class="pl-k">class</span> <span class="pl-en">MyQueue</span> {
  <span class="pl-k">var</span> <span class="pl-v">queue</span> <span class="pl-k">=</span> <span class="pl-en">ArrayBuffer</span>[<span class="pl-en">Int</span>]()

  <span class="pl-c"><span class="pl-c">//</span> 移除元素，如果传递进来的跟队头相等，那么移除</span>
  <span class="pl-k">def</span> <span class="pl-en">poll</span>(<span class="pl-v">value</span>: <span class="pl-en">Int</span>)<span class="pl-k">:</span> <span class="pl-en">Unit</span> <span class="pl-k">=</span> {
    <span class="pl-k">if</span> (<span class="pl-k">!</span>queue.isEmpty <span class="pl-k">&amp;&amp;</span> queue.head <span class="pl-k">==</span> value) {
      queue.remove(<span class="pl-c1">0</span>)
    }
  }

  <span class="pl-c"><span class="pl-c">//</span> 添加元素，当队尾大于当前元素就删除</span>
  <span class="pl-k">def</span> <span class="pl-en">add</span>(<span class="pl-v">value</span>: <span class="pl-en">Int</span>)<span class="pl-k">:</span> <span class="pl-en">Unit</span> <span class="pl-k">=</span> {
    <span class="pl-k">while</span> (<span class="pl-k">!</span>queue.isEmpty <span class="pl-k">&amp;&amp;</span> value <span class="pl-k">&gt;</span> queue.last) {
      queue.remove(queue.length <span class="pl-k">-</span> <span class="pl-c1">1</span>)
    }
    queue.append(value)
  }

  <span class="pl-k">def</span> <span class="pl-en">peek</span>()<span class="pl-k">:</span> <span class="pl-en">Int</span> <span class="pl-k">=</span> queue.head
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">PHP:</h3><a id="user-content-php" class="anchor" aria-label="Permalink: PHP:" href="#php"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
    /**
     * @param Integer[] $nums
     * @param Integer $k
     * @return Integer[]
     */
    function maxSlidingWindow($nums, $k) {
        $myQueue = new MyQueue();
        // 先将前k的元素放进队列
        for ($i = 0; $i &lt; $k; $i++) { 
            $myQueue-&gt;push($nums[$i]);
        }

        $result = [];
        $result[] = $myQueue-&gt;max(); // result 记录前k的元素的最大值

        for ($i = $k; $i &lt; count($nums); $i++) {
            $myQueue-&gt;pop($nums[$i - $k]); // 滑动窗口移除最前面元素
            $myQueue-&gt;push($nums[$i]); // 滑动窗口前加入最后面的元素
            $result[]= $myQueue-&gt;max(); // 记录对应的最大值
        }
        return $result;
    }

}

// 单调对列构建
class MyQueue{
    private $queue;

    public function __construct(){
        $this-&gt;queue = new SplQueue(); //底层是双向链表实现。
    }

    public function pop($v){
        // 判断当前对列是否为空
        // 比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。
        // bottom 从链表前端查看元素, dequeue 从双向链表的开头移动一个节点
        if(!$this-&gt;queue-&gt;isEmpty() &amp;&amp; $v == $this-&gt;queue-&gt;bottom()){
            $this-&gt;queue-&gt;dequeue(); //弹出队列
        }
    }

    public function push($v){
        // 判断当前对列是否为空
        // 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。
        // 这样就保持了队列里的数值是单调从大到小的了。
        while (!$this-&gt;queue-&gt;isEmpty() &amp;&amp; $v &gt; $this-&gt;queue-&gt;top()) {
            $this-&gt;queue-&gt;pop(); // pop从链表末尾弹出一个元素，
        }
        $this-&gt;queue-&gt;enqueue($v);
    }

    // 查询当前队列里的最大值 直接返回队首
    public function max(){
        // bottom 从链表前端查看元素, top从链表末尾查看元素
        return $this-&gt;queue-&gt;bottom(); 
    }

    // 辅助理解: 打印队列元素
    public function println(){
        // &quot;迭代器移动到链表头部&quot;: 可理解为从头遍历链表元素做准备。
        // 【PHP中没有指针概念，所以就没说指针。从数据结构上理解，就是把指针指向链表头部】
        $this-&gt;queue-&gt;rewind();

        echo &quot;Println: &quot;;
        while($this-&gt;queue-&gt;valid()){
            echo $this-&gt;queue-&gt;current(),&quot; -&gt; &quot;;
            $this-&gt;queue-&gt;next();
        }
        echo &quot;\n&quot;;
    } 
}"><pre><span class="pl-k">class</span> Solution {
    <span class="pl-c">/**</span>
<span class="pl-c">     * @param Integer[] $nums</span>
<span class="pl-c">     * @param Integer $k</span>
<span class="pl-c">     * @return Integer[]</span>
<span class="pl-c">     */</span>
    <span class="pl-k">function</span> <span class="pl-en">maxSlidingWindow</span>(<span class="pl-s1"><span class="pl-c1">$</span>nums</span>, <span class="pl-s1"><span class="pl-c1">$</span>k</span>) {
        <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span> = <span class="pl-k">new</span> <span class="pl-v">MyQueue</span>();
        <span class="pl-c">// 先将前k的元素放进队列</span>
        <span class="pl-k">for</span> (<span class="pl-s1"><span class="pl-c1">$</span>i</span> = <span class="pl-c1">0</span>; <span class="pl-s1"><span class="pl-c1">$</span>i</span> &lt; <span class="pl-s1"><span class="pl-c1">$</span>k</span>; <span class="pl-s1"><span class="pl-c1">$</span>i</span>++) { 
            <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span>-&gt;<span class="pl-en">push</span>(<span class="pl-s1"><span class="pl-c1">$</span>nums</span>[<span class="pl-s1"><span class="pl-c1">$</span>i</span>]);
        }

        <span class="pl-s1"><span class="pl-c1">$</span>result</span> = [];
        <span class="pl-s1"><span class="pl-c1">$</span>result</span>[] = <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span>-&gt;<span class="pl-en">max</span>(); <span class="pl-c">// result 记录前k的元素的最大值</span>

        <span class="pl-k">for</span> (<span class="pl-s1"><span class="pl-c1">$</span>i</span> = <span class="pl-s1"><span class="pl-c1">$</span>k</span>; <span class="pl-s1"><span class="pl-c1">$</span>i</span> &lt; <span class="pl-en">count</span>(<span class="pl-s1"><span class="pl-c1">$</span>nums</span>); <span class="pl-s1"><span class="pl-c1">$</span>i</span>++) {
            <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span>-&gt;<span class="pl-en">pop</span>(<span class="pl-s1"><span class="pl-c1">$</span>nums</span>[<span class="pl-s1"><span class="pl-c1">$</span>i</span> - <span class="pl-s1"><span class="pl-c1">$</span>k</span>]); <span class="pl-c">// 滑动窗口移除最前面元素</span>
            <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span>-&gt;<span class="pl-en">push</span>(<span class="pl-s1"><span class="pl-c1">$</span>nums</span>[<span class="pl-s1"><span class="pl-c1">$</span>i</span>]); <span class="pl-c">// 滑动窗口前加入最后面的元素</span>
            <span class="pl-s1"><span class="pl-c1">$</span>result</span>[]= <span class="pl-s1"><span class="pl-c1">$</span>myQueue</span>-&gt;<span class="pl-en">max</span>(); <span class="pl-c">// 记录对应的最大值</span>
        }
        <span class="pl-k">return</span> <span class="pl-s1"><span class="pl-c1">$</span>result</span>;
    }

}

<span class="pl-c">// 单调对列构建</span>
<span class="pl-k">class</span> MyQueue{
    <span class="pl-k">private</span> <span class="pl-c1"><span class="pl-c1">$</span>queue</span>;

    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">__construct</span>(){
        <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span> = <span class="pl-k">new</span> <span class="pl-v">SplQueue</span>(); <span class="pl-c">//底层是双向链表实现。</span>
    }

    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">pop</span>(<span class="pl-s1"><span class="pl-c1">$</span>v</span>){
        <span class="pl-c">// 判断当前对列是否为空</span>
        <span class="pl-c">// 比较当前要弹出的数值是否等于队列出口元素的数值，如果相等则弹出。</span>
        <span class="pl-c">// bottom 从链表前端查看元素, dequeue 从双向链表的开头移动一个节点</span>
        <span class="pl-k">if</span>(!<span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1"><span class="pl-c1">$</span>v</span> == <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">bottom</span>()){
            <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">dequeue</span>(); <span class="pl-c">//弹出队列</span>
        }
    }

    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">push</span>(<span class="pl-s1"><span class="pl-c1">$</span>v</span>){
        <span class="pl-c">// 判断当前对列是否为空</span>
        <span class="pl-c">// 如果push的数值大于入口元素的数值，那么就将队列后端的数值弹出，直到push的数值小于等于队列入口元素的数值为止。</span>
        <span class="pl-c">// 这样就保持了队列里的数值是单调从大到小的了。</span>
        <span class="pl-k">while</span> (!<span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">isEmpty</span>() &amp;&amp; <span class="pl-s1"><span class="pl-c1">$</span>v</span> &gt; <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">top</span>()) {
            <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">pop</span>(); <span class="pl-c">// pop从链表末尾弹出一个元素，</span>
        }
        <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">enqueue</span>(<span class="pl-s1"><span class="pl-c1">$</span>v</span>);
    }

    <span class="pl-c">// 查询当前队列里的最大值 直接返回队首</span>
    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">max</span>(){
        <span class="pl-c">// bottom 从链表前端查看元素, top从链表末尾查看元素</span>
        <span class="pl-k">return</span> <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">bottom</span>(); 
    }

    <span class="pl-c">// 辅助理解: 打印队列元素</span>
    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">println</span>(){
        <span class="pl-c">// "迭代器移动到链表头部": 可理解为从头遍历链表元素做准备。</span>
        <span class="pl-c">// 【PHP中没有指针概念，所以就没说指针。从数据结构上理解，就是把指针指向链表头部】</span>
        <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">rewind</span>();

        <span class="pl-k">echo</span> <span class="pl-s">"<span class="pl-s">Println: </span>"</span>;
        <span class="pl-k">while</span>(<span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">valid</span>()){
            <span class="pl-k">echo</span> <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">current</span>(),<span class="pl-s">"<span class="pl-s"> -&gt; </span>"</span>;
            <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">queue</span>-&gt;<span class="pl-en">next</span>();
        }
        <span class="pl-k">echo</span> <span class="pl-s">"\n"</span>;
    } 
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C#:</h3><a id="user-content-c" class="anchor" aria-label="Permalink: C#:" href="#c"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class myDequeue{
        private LinkedList&lt;int&gt; linkedList = new LinkedList&lt;int&gt;();

        public void Enqueue(int n){
            while(linkedList.Count &gt; 0 &amp;&amp; linkedList.Last.Value &lt; n){
                linkedList.RemoveLast();
            }
            linkedList.AddLast(n);
        }

        public int Max(){
            return linkedList.First.Value;
        }

        public void Dequeue(int n){
            if(linkedList.First.Value == n){
                linkedList.RemoveFirst();
            }   
        }
    }

    myDequeue window = new myDequeue();
    List&lt;int&gt; res = new List&lt;int&gt;();

    public int[] MaxSlidingWindow(int[] nums, int k) {
        for(int i = 0; i &lt; k; i++){
            window.Enqueue(nums[i]);
        }
        res.Add(window.Max());
        for(int i = k; i &lt; nums.Length; i++){
            window.Dequeue(nums[i-k]);
            window.Enqueue(nums[i]);
            res.Add(window.Max());
        }

        return res.ToArray();
    }"><pre><span class="pl-k">class</span> <span class="pl-smi">myDequeue</span><span class="pl-kos">{</span>
        <span class="pl-k">private</span> <span class="pl-smi">LinkedList</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">linkedList</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">LinkedList</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

        <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Enqueue</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">n</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
            <span class="pl-k">while</span><span class="pl-kos">(</span><span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-s1">Count</span> <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-s1">Last</span><span class="pl-kos">.</span><span class="pl-s1">Value</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">n</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
                <span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-en">RemoveLast</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
            <span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-en">AddLast</span><span class="pl-kos">(</span><span class="pl-s1">n</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>

        <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-en">Max</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
            <span class="pl-k">return</span> <span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-s1">First</span><span class="pl-kos">.</span><span class="pl-s1">Value</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>

        <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Dequeue</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">n</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
            <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-s1">First</span><span class="pl-kos">.</span><span class="pl-s1">Value</span> <span class="pl-c1">==</span> <span class="pl-s1">n</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
                <span class="pl-s1">linkedList</span><span class="pl-kos">.</span><span class="pl-en">RemoveFirst</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>   
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>

    <span class="pl-smi">myDequeue</span> <span class="pl-s1">window</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">myDequeue</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-smi">List</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">res</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">List</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

    <span class="pl-k">public</span> <span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">MaxSlidingWindow</span><span class="pl-kos">(</span><span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">nums</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">k</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">for</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">k</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
            <span class="pl-s1">window</span><span class="pl-kos">.</span><span class="pl-en">Enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
        <span class="pl-s1">res</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">window</span><span class="pl-kos">.</span><span class="pl-en">Max</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">for</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-s1">k</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">nums</span><span class="pl-kos">.</span><span class="pl-s1">Length</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span><span class="pl-kos">{</span>
            <span class="pl-s1">window</span><span class="pl-kos">.</span><span class="pl-en">Dequeue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-c1">-</span><span class="pl-s1">k</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">window</span><span class="pl-kos">.</span><span class="pl-en">Enqueue</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">res</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">window</span><span class="pl-kos">.</span><span class="pl-en">Max</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>

        <span class="pl-k">return</span> <span class="pl-s1">res</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Rust:</h3><a id="user-content-rust" class="anchor" aria-label="Permalink: Rust:" href="#rust"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="impl Solution {
    pub fn max_sliding_window(nums: Vec&lt;i32&gt;, k: i32) -&gt; Vec&lt;i32&gt; {
        let mut res = vec![];
        let mut queue = VecDeque::with_capacity(k as usize);
        for (i, &amp;v) in nums.iter().enumerate() {
            // 如果队列长度超过 k，那么需要移除队首过期元素
            if i - queue.front().unwrap_or(&amp;0) == k as usize {
                queue.pop_front();
            }
            while let Some(&amp;index) = queue.back() {
                if nums[index] &gt;= v {
                    break;
                }
                // 如果队列第一个元素比当前元素小，那么就把队列第一个元素弹出
                queue.pop_back();
            }
            queue.push_back(i);
            if i &gt;= k as usize - 1 {
                res.push(nums[queue[0]]);
            }
        }
        res
    }
}"><pre><span class="pl-k">impl</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">max_sliding_window</span><span class="pl-kos">(</span><span class="pl-s1">nums</span><span class="pl-kos">:</span> <span class="pl-smi">Vec</span><span class="pl-kos">&lt;</span><span class="pl-smi">i32</span><span class="pl-kos">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">k</span><span class="pl-kos">:</span> <span class="pl-smi">i32</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">Vec</span><span class="pl-kos">&lt;</span><span class="pl-smi">i32</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-k">mut</span> res = <span class="pl-en">vec</span><span class="pl-en">!</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-k">let</span> <span class="pl-k">mut</span> queue = <span class="pl-smi">VecDeque</span><span class="pl-kos">::</span><span class="pl-en">with_capacity</span><span class="pl-kos">(</span>k <span class="pl-k">as</span> <span class="pl-smi">usize</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">for</span> <span class="pl-kos">(</span>i<span class="pl-kos">,</span> <span class="pl-c1">&amp;</span>v<span class="pl-kos">)</span> <span class="pl-k">in</span> nums<span class="pl-kos">.</span><span class="pl-en">iter</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">enumerate</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-c">// 如果队列长度超过 k，那么需要移除队首过期元素</span>
            <span class="pl-k">if</span> i - queue<span class="pl-kos">.</span><span class="pl-en">front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">unwrap_or</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span><span class="pl-c1">0</span><span class="pl-kos">)</span> == k <span class="pl-k">as</span> <span class="pl-smi">usize</span> <span class="pl-kos">{</span>
                queue<span class="pl-kos">.</span><span class="pl-en">pop_front</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
            <span class="pl-k">while</span> <span class="pl-k">let</span> <span class="pl-v">Some</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span>index<span class="pl-kos">)</span> = queue<span class="pl-kos">.</span><span class="pl-en">back</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-k">if</span> nums<span class="pl-kos">[</span>index<span class="pl-kos">]</span> &gt;= v <span class="pl-kos">{</span>
                    <span class="pl-k">break</span><span class="pl-kos">;</span>
                <span class="pl-kos">}</span>
                <span class="pl-c">// 如果队列第一个元素比当前元素小，那么就把队列第一个元素弹出</span>
                queue<span class="pl-kos">.</span><span class="pl-en">pop_back</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
            queue<span class="pl-kos">.</span><span class="pl-en">push_back</span><span class="pl-kos">(</span>i<span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> i &gt;= k <span class="pl-k">as</span> <span class="pl-smi">usize</span> - <span class="pl-c1">1</span> <span class="pl-kos">{</span>
                res<span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span>nums<span class="pl-kos">[</span>queue<span class="pl-kos">[</span><span class="pl-c1">0</span><span class="pl-kos">]</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
        res
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C++</h3><a id="user-content-c-1" class="anchor" aria-label="Permalink: C++" href="#c-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">使用multiset作为单调队列</p>
<p dir="auto">多重集合(<code>multiset</code>) 用以有序地存储元素的容器。允许存在相等的元素。</p>
<p dir="auto">在遍历原数组的时候，只需要把窗口的头元素加入到multiset中，然后把窗口的尾元素删除即可。因为multiset是有序的，并且提供了*rbegin()，可以直接获取窗口最大值。</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    vector&lt;int&gt; maxSlidingWindow(vector&lt;int&gt;&amp; nums, int k) {
        multiset&lt;int&gt; st;
        vector&lt;int&gt; ans;
        for (int i = 0; i &lt; nums.size(); i++) {
            if (i &gt;= k) st.erase(st.find(nums[i - k]));
            st.insert(nums[i]);
            if (i &gt;= k - 1) ans.push_back(*st.rbegin());
        }
        return ans;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    vector&lt;<span class="pl-k">int</span>&gt; <span class="pl-en">maxSlidingWindow</span>(vector&lt;<span class="pl-k">int</span>&gt;&amp; nums, <span class="pl-k">int</span> k) {
        multiset&lt;<span class="pl-k">int</span>&gt; st;
        vector&lt;<span class="pl-k">int</span>&gt; ans;
        <span class="pl-k">for</span> (<span class="pl-k">int</span> i = <span class="pl-c1">0</span>; i &lt; nums.<span class="pl-c1">size</span>(); i++) {
            <span class="pl-k">if</span> (i &gt;= k) st.<span class="pl-c1">erase</span>(st.<span class="pl-c1">find</span>(nums[i - k]));
            st.<span class="pl-c1">insert</span>(nums[i]);
            <span class="pl-k">if</span> (i &gt;= k - <span class="pl-c1">1</span>) ans.<span class="pl-c1">push_back</span>(*st.<span class="pl-c1">rbegin</span>());
        }
        <span class="pl-k">return</span> ans;
    }
};</pre></div>
<p align="center" dir="auto">
<a href="https://programmercarl.com/other/kstar.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg" width="1000" style="max-width: 100%;">
</a>
</p></article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

