最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

長度最小的子數(shù)組題目詳解(Java版)

 更新時間:2023年12月26日 16:02:33   作者:楠枬  
這篇文章主要給大家介紹了關(guān)于長度最小的子數(shù)組(Java版)的相關(guān)資料,這到題來自力扣,通過學習本文對大家理解這道題目有很大的幫助,需要的朋友可以參考下

題目描述

給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) target 。

找出該數(shù)組中滿足其和 ≥ target 的長度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其長度如果不存在符合條件的子數(shù)組,返回 0 。

示例:

輸入:target = 7, nums = [2,3,1,2,4,3]
輸出:2
輸入:target = 4, nums = [1,4,4]
輸出:1

題解

思路分析

題目要求我們找到和 >= target 最小連續(xù) 的子數(shù)組,我們很容易想到暴力枚舉的方法,即訪問數(shù)組的每一個元素i,并將i作為第一個元素,向后尋找

暴力枚舉代碼

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int count = 0;
        for(int i = 0; i < nums.length; i++){
            int sum = 0;
            //向后遍歷找到以nums[i]為起始元素的最小數(shù)組
            for(int j = i; j < nums.length;j++){
                sum += nums[j];
                if(sum >= target){
                     //更新目標值 由于count的初始值為0,因此需要更新初始值,
                     //否則最小值恒為0
                    if(count > j-i+1 || count == 0){
                        count = j-i+1;
                    }
                    break;
                }
            }
        }
        //若count未被更新,則返回0,即沒有子數(shù)組的和大于target,
        //若count被跟新,則返回最小的子數(shù)組長度
        return count;
    }
}

此時我們通過遍歷訪問了數(shù)組的每個元素,在訪問每個元素時,以該元素為起始元素,并向后尋找其最小長度的子數(shù)組,因此時間復制度為O(^{_N{2}})

而,題目所給的數(shù)組中所有元素均是正整數(shù),因此每加上一個元素,子數(shù)組的和 sum 增加,通過這個特性,我們可以想到使用滑動窗口來解決這個問題

什么是滑動窗口?

滑動窗口是一種基于雙指針的思想,兩個指針指向的元素之間形成了一個窗口

因此滑動窗口是通過兩個指針來維護的,那么如何移動這兩個指針,是使用滑動窗口解決問題的關(guān)鍵

 初始時,兩個指針都指向0下標位置

遍歷元素,若條件不滿足,則將right指針向右移動,直到條件滿足為止

條件滿足時,則保持右指針不變,開始移動左指針 left

在向窗口中添加新元素或從窗口中刪除舊元素時,可能會更新一些與窗口范圍有關(guān)的數(shù)據(jù)(例如,本題就需要更新最小子數(shù)組的長度)

如何使用滑動窗口解決本題? 

(1)我們定義兩個指針left right,并讓其都指向數(shù)組首元素

(2)此時窗口內(nèi)只有 2 這一個元素,不滿足和 sum >= target,因此將right向右移動,將新的元素加入窗口中,并判斷此時子數(shù)組的和 sum 是否大于等于target,若滿足,則不再移動right

(3)在sum >= target時,首先判斷最小的子數(shù)組長度是否需要更新,并保持right不變,向右移動左指針left,刪除舊的元素,直到sum < target

(4)循環(huán)(2)(3),直到right遍歷完數(shù)組

為什么可以使用滑動窗口解決本題?

因為我們要找的子數(shù)組是連續(xù)的,且數(shù)組中的元素都為正整數(shù),即子數(shù)組中增加一個元素,子數(shù)組中的元素和sum增加,從窗口中刪除一個元素,sum減小,因此我們可以通過改變子數(shù)組的兩端元素來更新數(shù)組,因此可以使用滑動窗口來解決本題

由于左右指針都只遍歷了一遍數(shù)組,因此時間復雜度O(N)

滑動窗口代碼

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int right = 0;
        int sum = nums[0];
        int len = nums.length;
        int count = 0;
        while(left <= right && right < len){
            //小于目標值,向右移動右指針right
            while(left <= right && right < len && sum < target){
                right++;
                if(right == len){
                    break;
                }
                sum += nums[right];
            }
            //大于等于目標值
            while(left <= right && sum >= target){
                //更新目標值 由于count的初始值為0,因此需要更新初始值,否則最小值恒為0
                if((right - left) < count || count == 0){
                    count = right - left + 1;
                }
                //左邊值出窗口,left向右移動
                sum -= nums[left];
                left++;
            }
        }
        //若count未被更新,則返回0,即沒有子數(shù)組的和大于target,
        //若count被跟新,則返回最小的子數(shù)組長度
        return count;
    }
}

題目來自:

LCR 008. 長度最小的子數(shù)組 - 力扣(LeetCode)

總結(jié)

到此這篇關(guān)于長度最小的子數(shù)組題目的文章就介紹到這了,更多相關(guān)Java長度最小的子數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單了解Java多線程實現(xiàn)的四種方式

    簡單了解Java多線程實現(xiàn)的四種方式

    這篇文章主要介紹了簡單了解Java多線程實現(xiàn)的四種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java踩坑記錄之Arrays.AsList

    Java踩坑記錄之Arrays.AsList

    這篇文章主要給大家介紹了關(guān)于Java踩坑記錄之Arrays.AsList的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 一文帶你了解Java中的ForkJoin

    一文帶你了解Java中的ForkJoin

    這篇文章主要介紹了一文帶你了解Java中的ForkJoin,F(xiàn)orkJoinTask本身的依賴關(guān)系并不復雜,它與異步任務計算FutureTask一樣均實現(xiàn)了Future接口,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-04-04
  • Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能實例

    Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能實例

    分頁功能是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的,下面這篇文章主要給大家介紹了Spring MVC+MyBatis+MySQL實現(xiàn)分頁功能的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    這篇文章主要介紹了詳解Spring Kafka中關(guān)于Kafka的配置參數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • MyBatis trim標簽核心用法代碼實戰(zhàn)

    MyBatis trim標簽核心用法代碼實戰(zhàn)

    MyBatis的<trim>標簽用于動態(tài)SQL拼接,處理SQL前后綴和多余關(guān)鍵字,避免語法錯誤,提升代碼可維護性,本文給大家介紹MyBatis trim標簽核心用法代碼實戰(zhàn),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java文件流關(guān)閉和垃圾回收機制

    Java文件流關(guān)閉和垃圾回收機制

    本文是關(guān)于Java IO文件流和垃圾回收問題,一個小的測試程序搞清楚Java IO的問題,希望能幫助有需要的小伙伴
    2016-07-07
  • IDEA實現(xiàn)通過generator自動生成實體類、dao以及mapper文件

    IDEA實現(xiàn)通過generator自動生成實體類、dao以及mapper文件

    文章主要記錄了使用MyBatis Generator自動生成代碼過程中遇到的一些問題及解決方案,包括MyBatis Generator的配置,Lombok插件的整合,生成的mapping中的.xml文件出現(xiàn)代碼重復的問題解決方法等
    2026-05-05
  • java實現(xiàn)簡單超市管理系統(tǒng)

    java實現(xiàn)簡單超市管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單超市管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 在Java中實現(xiàn)Excel文檔屬性添加的操作指南

    在Java中實現(xiàn)Excel文檔屬性添加的操作指南

    在日常的Java開發(fā)工作中,我們經(jīng)常需要與Excel文檔打交道,無論是生成報表、導入導出數(shù)據(jù),還是進行數(shù)據(jù)分析,Excel都扮演著不可或缺的角色,本文將深入探討如何在Java中,利用功能強大的Spire.XLS for Java庫,輕松實現(xiàn)Excel文檔屬性的添加、修改和讀取
    2025-12-12

最新評論

墨脱县| 子长县| 辛集市| 揭东县| 洛隆县| 禹州市| 方城县| 巧家县| 拉孜县| 阜康市| 繁峙县| 西盟| 禄丰县| 大宁县| 台湾省| 勐海县| 临颍县| 梅河口市| 靖边县| 太谷县| 临桂县| 五莲县| 义马市| 邢台县| 潮安县| 杂多县| 惠州市| 吉隆县| 绥芬河市| 恩平市| 芮城县| 舞阳县| 海晏县| 龙川县| 新龙县| 团风县| 洛浦县| 惠东县| 忻城县| 罗定市| 安多县|