中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

怎么做免費(fèi)域名網(wǎng)站百度首頁(yè)官網(wǎng)

怎么做免費(fèi)域名網(wǎng)站,百度首頁(yè)官網(wǎng),深圳珠寶網(wǎng)站建設(shè),門戶網(wǎng)站建設(shè)費(fèi)用科目和為 K 的子數(shù)組(mid) 給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù) k ,請(qǐng)你統(tǒng)計(jì)并返回 該數(shù)組中和為 k 的子數(shù)組的個(gè)數(shù) 。 子數(shù)組是數(shù)組中元素的連續(xù)非空序列。 輸入:nums [1,1,1], k 2 輸出:2 解法1:前綴和Map 這…

和為 K 的子數(shù)組(mid)

給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù) k ,請(qǐng)你統(tǒng)計(jì)并返回 該數(shù)組中和為 k 的子數(shù)組的個(gè)數(shù) 。
子數(shù)組是數(shù)組中元素的連續(xù)非空序列。

輸入:nums = [1,1,1], k = 2
輸出:2


解法1:前綴和+Map
這是一道經(jīng)典的前綴和運(yùn)用題。
統(tǒng)計(jì)以每一個(gè) nums[i] 為結(jié)尾,和為 k 的子數(shù)組數(shù)量即是答案。
我們可以預(yù)處理前綴和數(shù)組 prefix,對(duì)于求解以某一個(gè) nums[i] 為結(jié)尾的,和為 k 的子數(shù)組數(shù)量,本質(zhì)上是求解在 [0,i] 中,prefix 數(shù)組中有多少個(gè)值為 prefix[i]?k 的數(shù),這可以在遍歷過(guò)程中使用「哈希表」進(jìn)行同步記錄。
是以當(dāng)前節(jié)點(diǎn)為結(jié)尾的計(jì)算,不是以當(dāng)前節(jié)點(diǎn)為起始的計(jì)算!!!

public int subarraySum(int[] nums, int k) {int len = nums.length;int[] prefix = new int[len];prefix[0] = nums[0];for (int i=1; i<len; i++){prefix[i] = prefix[i-1]+nums[i];}Map<Integer,Integer> map = new HashMap<>();//當(dāng)子串的起始節(jié)點(diǎn)為0,即取前綴和的整段而不做截?cái)?/span>//需要插入一個(gè)長(zhǎng)度為0的子串map.put(0,1);int res = 0;for(int i=0; i<len; i++){res += map.getOrDefault(prefix[i]-k,0);map.put(prefix[i],map.getOrDefault(prefix[i],0)+1);}return res;
}

滑動(dòng)窗口最大值(hard)

給你一個(gè)整數(shù)數(shù)組 nums,有一個(gè)大小為 k 的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)。你只可以看到在滑動(dòng)窗口內(nèi)的 k 個(gè)數(shù)字?;瑒?dòng)窗口每次只向右移動(dòng)一位。
返回 滑動(dòng)窗口中的最大值 。

輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3
輸出:[3,3,5,5,6,7]
解釋:
滑動(dòng)窗口的位置 最大值


[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7


解法1:滑動(dòng)窗口,最優(yōu)
假設(shè)我們當(dāng)前處理到某個(gè)長(zhǎng)度為 k 的窗口,此時(shí)窗口往后滑動(dòng)一格,會(huì)導(dǎo)致后一個(gè)數(shù)(新窗口的右端點(diǎn))添加進(jìn)來(lái),同時(shí)會(huì)導(dǎo)致前一個(gè)數(shù)(舊窗口的左端點(diǎn))移出窗口。
隨著窗口的不斷平移,該過(guò)程會(huì)一直發(fā)生。若同一時(shí)刻存在兩個(gè)數(shù) nums[j] 和 nums[i](j<i)所在一個(gè)窗口內(nèi),下標(biāo)更大的數(shù)會(huì)被更晚移出窗口,此時(shí)如果有 nums[j]<=nums[i] 的話,可以完全確定 nums[j] 將不會(huì)成為后續(xù)任何一個(gè)窗口的最大值,此時(shí)可以將必然不會(huì)是答案的 nums[j] 從候選中進(jìn)行移除。
不難發(fā)現(xiàn),當(dāng)我們將所有必然不可能作為答案的元素(即所有滿足的小于等于 nums[i] )移除后,候選集合滿足「單調(diào)遞減」特性,即集合首位元素為當(dāng)前窗口中的最大值(為了滿足窗口長(zhǎng)度為 k 的要求,在從集合頭部取答案時(shí)需要先將下標(biāo)小于的等于的 i?k 的元素移除)。
為方便從尾部添加元素,從頭部獲取答案,我們可使用「雙端隊(duì)列」存儲(chǔ)所有候選元素。
用一個(gè)容器,充當(dāng)窗口,保持它存儲(chǔ)的元素是單調(diào)非遞增,這樣它的第一個(gè)元素就是容器中的最大值,最后一個(gè)就是最小值,根據(jù)前面的分析,向右滑動(dòng)過(guò)程中,如果遇到了更大的元素,就可以把在容器中小于它的元素都移除掉,因?yàn)楹蠹尤氲母蟮脑夭趴赡艹蔀槿萜髦械淖畲笾?/strong>。因?yàn)榈谝粋€(gè)元素是最大值,我們需要能夠獲取它,所以,這是一個(gè)先入先出的容器,這里用隊(duì)列就可以了。它的思路與單調(diào)棧一樣,但只不過(guò)用隊(duì)列來(lái)當(dāng)容器,這便是“單調(diào)隊(duì)列”了。

public int[] maxSlidingWindow(int[] nums, int k) {Deque<Integer> stack = new ArrayDeque<>();int[] res = new int[nums.length-k+1];for(int i=0; i<nums.length; i++){// 隊(duì)列中的下標(biāo)是小于新加入的i,那么如果[i]>= 隊(duì)尾// 說(shuō)明隊(duì)尾肯定不會(huì)是窗口里的一個(gè)最大值了// 從隊(duì)尾開(kāi)始,把小于[i]的都移除掉。// 這樣就能保證隊(duì)列的值是一個(gè)單調(diào)非遞減隊(duì)列了while(!stack.isEmpty() && nums[stack.peekLast()]<nums[i]){stack.pollLast();}stack.addLast(i);if(i>=k-1){// 現(xiàn)在的隊(duì)首就是窗口中的最大值res[i-k+1] = nums[stack.peekFirst()];// 再把左滑出窗口的最大值從隊(duì)列中移除,因?yàn)樗驯换龃翱诹?/span>if(stack.peekFirst()+k-1 == i) stack.pollFirst();}}return res;
}

解法2:優(yōu)先隊(duì)列
image.png

public int[] maxSlidingWindow(int[] nums, int k) {// 使用優(yōu)先隊(duì)列(大頂堆)來(lái)存儲(chǔ)窗口中的索引,以便快速找到最大值PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> nums[b] - nums[a]);// 初始化結(jié)果數(shù)組,長(zhǎng)度為 nums 數(shù)組長(zhǎng)度減去窗口大小 k 再加 1int[] res = new int[nums.length - k + 1];for (int i = 0; i < nums.length; i++) {// 將當(dāng)前索引 i 加入優(yōu)先隊(duì)列pq.add(i);// 當(dāng)索引 i 大于 k-1 時(shí),說(shuō)明窗口已經(jīng)滑動(dòng)了至少 k 次,可以開(kāi)始記錄最大值if (i >= k - 1) {// 記錄窗口內(nèi)的最大值,即優(yōu)先隊(duì)列中索引對(duì)應(yīng)的值res[i - k + 1] = nums[pq.peek()];// 清除出窗口的元素,即索引小于 i-k+1 的元素while (!pq.isEmpty() && pq.peek() <= i - k + 1) {pq.poll();}}}// 返回結(jié)果數(shù)組,包含了每個(gè)窗口的最大值return res;
}

最小覆蓋字串

給你一個(gè)字符串 s 、一個(gè)字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串,則返回空字符串 “” 。
對(duì)于 t 中重復(fù)字符,我們尋找的子字符串中該字符數(shù)量必須不少于 t 中該字符數(shù)量。
如果 s 中存在這樣的子串,我們保證它是唯一的答案。

輸入:s = “ADOBECODEBANC”, t = “ABC”
輸出:“BANC”
解釋:最小覆蓋子串 “BANC” 包含來(lái)自字符串 t 的 ‘A’、‘B’ 和 ‘C’。


解法1:滑動(dòng)窗口

public String minWindow(String s, String t) {// 初始化一個(gè)足夠大的數(shù)組來(lái)計(jì)數(shù)字符,假設(shè)字符集大小為70(A-Z的大小寫)int[] cnt = new int[70];// 標(biāo)記是否找到有效子串boolean flag = false;// 遍歷字符串 t,對(duì)每個(gè)字符進(jìn)行計(jì)數(shù),并將對(duì)應(yīng)的數(shù)組元素減1for (int i = 0; i < t.length(); i++) {char c = t.charAt(i);cnt[c - 'A']--; // 將字符轉(zhuǎn)換為0-65的整數(shù),便于在數(shù)組中索引}// 初始化結(jié)果字符串為 s,假設(shè)沒(méi)有找到更小的子串String res = s;// 初始化左右指針int l = 0, r = 0;// 滑動(dòng)窗口的右邊界while (r < s.length()) {// 將 s 的當(dāng)前字符計(jì)數(shù)加1cnt[s.charAt(r) - 'A']++;// 當(dāng)前窗口包含 t 的所有字符時(shí),嘗試收縮左邊界while (l <= r && check(cnt)) {// 標(biāo)記已找到有效子串flag = true;// 更新最小窗口String tmp = s.substring(l, r + 1);res = tmp.length() < res.length() ? tmp : res;// 移動(dòng)左邊界,將 l 所指的字符從計(jì)數(shù)器中減去cnt[s.charAt(l) - 'A']--;l++;}// 擴(kuò)展右邊界,繼續(xù)尋找可能的最小子串r++;}// 如果找到了有效子串,返回 res,否則返回空字符串return flag ? res : "";
}// 檢查數(shù)組中的所有計(jì)數(shù)是否都大于等于0,即 s 的當(dāng)前窗口是否包含 t 的所有字符
public boolean check(int[] arr) {for (int i = 0; i < arr.length; i++) {if (arr[i] < 0)return false; // 如果有字符計(jì)數(shù)小于0,則當(dāng)前窗口不包含 t 的所有字符}return true; // 所有字符計(jì)數(shù)都非負(fù),說(shuō)明當(dāng)前窗口包含 t 的所有字符
}

定義兩個(gè)長(zhǎng)度為 60(足夠存下所有字母種類)的數(shù)組 c1 和 c2,用于存儲(chǔ)字符頻率。其中 c1 用于記錄字符串 t 中字符的頻率,c2 用于記錄當(dāng)前滑動(dòng)窗口內(nèi)字符的頻率。
設(shè)定好字母與頻率數(shù)組下標(biāo)的映射關(guān)系:小寫字母 a-z 對(duì)應(yīng)下標(biāo) 0-25,大寫字母 A-Z 對(duì)應(yīng)下標(biāo) 26-51。
使用變量 tot 來(lái)記錄還需要匹配的字符種類數(shù),當(dāng) tot = 0 代表當(dāng)前滑動(dòng)窗口對(duì)應(yīng)的子串能夠?qū)崿F(xiàn)對(duì) t 的覆蓋,即任意字符滿足 c2[i]≥c1[i]。
使用雙指針 j 和 i 表示滑動(dòng)窗口的左右邊界。從前往后遍歷字符串 s,在每個(gè)位置上更新字符頻率數(shù)組 c2。若 c2 中字符的頻率達(dá)到了 c1 中的字符頻率,則將 tot 減 1,表示一個(gè)字符已經(jīng)匹配完成。
每當(dāng)右邊界往后移動(dòng)一步之后,滑動(dòng)窗口會(huì)增加一個(gè)字符。此時(shí)我們檢查左邊界能否右移,同時(shí)不會(huì)使得 tot 變大。即每次右邊界右移后,我們檢查左邊界 c2[j]>c1[j] 是否滿足:

  • 若滿足:說(shuō)明當(dāng)前左邊界指向字符并非必須,當(dāng)前子串 s[j…i] 必然不是最短子串。我們讓左邊界 j 進(jìn)行右移,并重復(fù)進(jìn)行左邊界 c2[j]>c1[j] 的檢查,直到窗口不能再收縮
  • 若不滿足:說(shuō)明當(dāng)前窗口沒(méi)有任何一個(gè)后綴字符串能夠?qū)崿F(xiàn)對(duì) t 的覆蓋,我們并不能對(duì)窗口實(shí)現(xiàn)收縮

每次對(duì)窗口移動(dòng)完成后,我們檢查當(dāng)前 tot 是否為 0(對(duì)字符串 t 的覆蓋是否完成),若為 0 則嘗試用當(dāng)前窗口對(duì)應(yīng)的字符串 s[j…i] 更新 ans。

class Solution {public String minWindow(String s, String t) {int n = s.length(), tot = 0;int[] c1 = new int[60], c2 = new int[60];for (char x : t.toCharArray()) {if (++c1[getIdx(x)] == 1) tot++;}String ans = "";for (int i = 0, j = 0; i < n; i++) {int idx1 = getIdx(s.charAt(i));if (++c2[idx1] == c1[idx1]) tot--;while (j < i) {int idx2 = getIdx(s.charAt(j));if (c2[idx2] > c1[idx2] && --c2[idx2] >= 0) j++;else break;}if (tot == 0 && (ans.length() == 0 || ans.length() > i - j + 1)) ans = s.substring(j, i + 1);}return ans;}int getIdx(char x) {return x >= 'A' && x <= 'Z' ? x - 'A' + 26 : x - 'a';}
}
http://www.risenshineclean.com/news/6425.html

相關(guān)文章:

  • 推薦中山精品網(wǎng)站建設(shè)杭州網(wǎng)絡(luò)排名優(yōu)化
  • 我們?yōu)槭裁催x擇做電子商務(wù)網(wǎng)站免費(fèi)發(fā)seo外鏈平臺(tái)
  • 東莞網(wǎng)站建設(shè)seo網(wǎng)絡(luò)推廣軟件
  • 社區(qū)電商平臺(tái)有哪些seo營(yíng)銷是什么
  • 網(wǎng)站推廣工作好做嗎國(guó)內(nèi)疫情最新消息
  • 怎么做阿里巴巴官網(wǎng)站模板建站教程
  • 深圳學(xué)校網(wǎng)站建設(shè)報(bào)價(jià)北京疫情最新新聞
  • 政府網(wǎng)站規(guī)范化建設(shè)廣告關(guān)鍵詞有哪些
  • 攜程做旅游的網(wǎng)站商城系統(tǒng)開(kāi)發(fā)
  • 網(wǎng)站建設(shè)服務(wù)流程優(yōu)化網(wǎng)站結(jié)構(gòu)一般包括
  • 做礦業(yè)的鄭州公司網(wǎng)站網(wǎng)站流量排名查詢工具
  • 做藝人資料卡的網(wǎng)站廣告策劃書
  • 關(guān)鍵詞排名優(yōu)化網(wǎng)站建設(shè)公司哪家好網(wǎng)站外鏈發(fā)布平臺(tái)
  • 做美女圖片網(wǎng)站犯法嗎廣告聯(lián)盟大全
  • 臨海大經(jīng)建設(shè)集團(tuán)網(wǎng)站網(wǎng)站怎么做
  • wordpress下載seo含義
  • 杭州下沙做網(wǎng)站的論壇網(wǎng)站建設(shè)全包
  • 網(wǎng)站開(kāi)發(fā)合同范本下載google網(wǎng)頁(yè)版登錄入口
  • 企業(yè)建站公司電話百度關(guān)鍵詞快排
  • 用ps做網(wǎng)站頁(yè)面seo查詢 站長(zhǎng)工具
  • 大型網(wǎng)絡(luò)游戲排行榜2021前十名湖南專業(yè)關(guān)鍵詞優(yōu)化服務(wù)水平
  • 網(wǎng)站ui設(shè)計(jì)包括哪些原則谷歌seo 外貿(mào)建站
  • 怎么自建導(dǎo)購(gòu)網(wǎng)站做淘客公司seo排名優(yōu)化
  • 網(wǎng)站開(kāi)發(fā)語(yǔ)言 微信接口百度快照優(yōu)化培訓(xùn)班
  • 河北省建設(shè)執(zhí)業(yè)資格中心網(wǎng)站網(wǎng)絡(luò)營(yíng)銷推廣技巧
  • 西充縣住房和城鄉(xiāng)規(guī)劃建設(shè)局網(wǎng)站google網(wǎng)站增加關(guān)鍵詞
  • 哪些網(wǎng)站是做b2b的網(wǎng)站維護(hù)一年一般多少錢?
  • 網(wǎng)站建設(shè)容易嗎seo自媒體培訓(xùn)
  • 連云港做網(wǎng)站最好惠州網(wǎng)站制作推廣
  • 專做海島游的網(wǎng)站如何交換友情鏈接