面試經典150題【41-50】

文章目錄

  • 面試經典150題【41-50】
    • 49.字母異位詞分組
    • 1. 兩數之和
    • 202.快樂數
    • 219. 存在重復元素II
    • 128.最長連續序列
    • 228. 匯總區間
    • 56.合并區間(華為面試題)
    • 57.插入區間
    • 452.用最少的箭引爆氣球
    • 20.有效的括號

面試經典150題【41-50】

49.字母異位詞分組

在這里插入圖片描述

用這種流式的處理
return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> { 處理邏輯 })).values() );
不然處理起來太麻煩了。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> {// 返回 str 排序后的結果。// 按排序后的結果來grouping by,算子類似于 sql 里的 group by。char[] array = str.toCharArray();Arrays.sort(array);return new String(array);})).values());}
}

如果不排序的話,可以進行編碼: [b,a,a,a,b,c] 編碼成 a3b2c1, 然后再group by.

class Solution {public List<List<String>> groupAnagrams(String[] strs) {return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> {int[] counter = new int[26];for (int i = 0; i < str.length(); i++) {counter[str.charAt(i) - 'a']++;}StringBuilder sb = new StringBuilder();for (int i = 0; i < 26; i++) {// 這里的 if 是可省略的,但是加上 if 以后,生成的 sb 更短,后續 groupingBy 會更快。if (counter[i] != 0) {sb.append((char) ('a' + i));sb.append(counter[i]);}}return sb.toString();})).values());}
}

1. 兩數之和

在這里插入圖片描述
每遍歷一個數,就把這個數字放到哈希表里。當遍歷到下一個數字的時候,看哈希表里是否存在Key為 target - nums[i] 的值。

202.快樂數

在這里插入圖片描述
這個如果不是1,會進入一個循環。判斷循環就用雙指針就行。
在這里插入圖片描述
判斷成環。一個是可以用快慢指針,他們倆相遇則有環。一個是可以用一個set,如果有重復元素則有環。

219. 存在重復元素II

在這里插入圖片描述
區間大小為k,但是怎么保證K個里面能直接查出元素呢。
方法一:定義一個大小為k的hashSet, 如果包含元素則說明重復。因為hashSet會自動擴容,所以寫法是: if(hashSet.size() > k) hashSet.remove(nums[ i -k ] )
方法二:哈希表記錄[k,v]—> [ nums[i],i] ,如果包含則比較與i的距離,大于k則將[nums[i],j] 賦值給[nums[i],i] ,繼續遍歷。

128.最長連續序列

在這里插入圖片描述
因為是O(n) ,所以不能排序。遍歷一遍,放到set里。
然后再遍歷一遍Set, 如果包含 nums[i]+1,依次遍歷有沒有nums[i] +2, nums[i] +3 等等
但是這樣也會導致很多重復的遍歷。 可以放到map里 [key,value] ->[ nums[i], 左右最長的長度]
當前的長度 = left + right +1

 public int longestConsecutive(int[] nums) {HashMap<Integer,Integer> hashMap=new HashMap<>();int ans=0;for(int i=0;i<nums.length;i++){//包含說明以前處理過,不包含的話可能是單獨,也可能是邊界,也可能是剛好插在倆個大條之間if(!hashMap.containsKey(nums[i])){int left=hashMap.getOrDefault(nums[i]-1,0);int right=hashMap.getOrDefault(nums[i]+1,0);int tempAns=left+right+1;if(tempAns>ans){ans=tempAns;}hashMap.put(nums[i],tempAns);//不能只更新自己,邊界也要更新hashMap.put(nums[i]+right,tempAns);hashMap.put(nums[i]-left,tempAns);}}return ans;}

228. 匯總區間

按照題意模擬即可。

56.合并區間(華為面試題)

在這里插入圖片描述
先按左區間排序,然后依次遍歷,根據 nums[i+1][0] 和 nums[i][1] 判斷是否需要合并。

public class LC56 {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});ArrayList<int[]> ans=new ArrayList<>();int left=intervals[0][0],right=intervals[0][1];for(int i=1;i<intervals.length;i++){if(intervals[i][0]>right){//不合并,裝載ans.add(new int[]{left,right});//開始記錄新的區間left=intervals[i][0];right=intervals[i][1];}else{//合并區間right=Math.max(right,intervals[i][1]);}}//無論是intervals里只有一個元素的特判,  還是 正常情況下最后一步, 都要有下面這一行。ans.add(new int[]{left,right});return ans.toArray(new int[][]{});}
}

57.插入區間

和56.合并區間一個意思

452.用最少的箭引爆氣球

在這里插入圖片描述
所有的這種二維數組的,都要先排序。無非就是按照 左邊界 排序 或者按照 右邊界 排序。
而氣球這種場景,應該是按照右邊界排序,然后射擊第一個存在的氣球的最右邊。
判斷此次射擊會爆幾個氣球,要看別的氣球的左邊界是否小于射擊點。(因為是按右邊界排序的,右邊肯定是大的,左邊小就能被射到)

public int findMinArrowShots(int[][] points) {if(points.length==0) return 0;Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {//return o1[1]-o2[1];if(o1[1]>o2[1]){return 1;}else if(o1[1]<o2[1]){return -1;}else{return 0;}}});//按右邊界  進行排序//擊斃第一個氣球的最右邊,能擊斃幾個算幾個。//pos為擊斃點int pos=points[0][1];int ans=1;for(int i=0;i<points.length;i++){//因為是按右邊界排序的,判斷第i個氣球爆沒爆,要看第i個氣球的左邊界。if(pos<points[i][0]){ans++;pos=points[i][1];}}return ans;}

20.有效的括號

一個個單詞放到棧里,放左括號,遇到右括號檢查棧頂是否為對應的左括號即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711451.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

今日話題:---自卑

自卑是一種普遍存在的心理現象&#xff0c;它可能源于個人對自身能力、外貌、社會地位等方面的不滿意或不自信。自卑感可能會導致消極的情緒和行為&#xff0c;如焦慮、抑郁、逃避現實等。然而&#xff0c;適度的自卑感也可能激發個人努力提升自己&#xff0c;從而實現自我成長…

TensorBoard的使用,add_image()的使用。

在TensorBoard中&#xff0c;add_image()函數用于將圖像數據添加到可視化中。它可以用于顯示模型輸入、輸出、中間特征圖等圖像數據&#xff0c;以幫助開發者理解模型的運行情況。 add_image()的用法&#xff1a; 使用ctrl點擊add_image() 注意&#xff1a;圖片類型要求為 t…

機器學習筆記 YOLOv9模型相關論文簡讀

一、YOLOv9簡述 自 2015 年 Yolov1 推出以來,已經出現了多個版本。 基于Darknet的YOLOv2、YOLOv3和YOLOv4 YOLOv5 YOLOv8 基于 Ultralytics。 SCALED-YOLOv4 使用 Pytorch 而不是 Darknet。 YOLOR是YOLOv4的改進。 YOLOX是YOLOv3的改進。 YOLOv6專注于工業應用。 YOLOv7 來自 …

【實戰-08】 flink自定義Map中的變量的行為

場景 自定義Map或者別的算子的時候&#xff0c;有時候需要定義一些類變量&#xff0c;在flink內部高并發的情況下需要正確理解這些變量的行為 代碼 package com.pg.function;import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.common…

哇去,有了這篇文章,項目中引入了再多的字體包,我都不怕了!!!

通常情況下&#xff0c;我們在開發一個新項目的時候&#xff0c;項目那邊通常都會提供一些項目所需的字體包&#xff0c;來滿足項目對字體展示的特殊需求。 這部分大家都比較熟悉&#xff0c;就不詳細講了&#xff0c;直接上代碼&#xff1a; /* 引入字體包 */ font-face {fo…

異常處理(黑馬學習筆記)

當前問題 登錄功能和登錄校驗功能我們都實現了&#xff0c;下面我們學習下今天最后一塊技術點&#xff1a;異常處理。首先我們先來看一下系統出現異常之后會發生什么現象&#xff0c;再來介紹異常處理的方案。 我們打開瀏覽器&#xff0c;訪問系統中的新增部門操作&#xff0…

GEE高階應用python wxee——MODIS氣象數據可視化處理(2022年3-9月葡萄牙為例)以及可視化地圖加載

MODIS wxee 是專為處理氣象數據而設計的,但它在遙感數據方面也很有用。在本示例中,我們將了解 wxee 如何處理 MODIS 傳感器的數據,以及如何利用 xarray 對象創建彩色復合圖。 安裝和設定 #!pip install wxeeimport ee import wxeeee.Authenticate() wxee.Initialize(proje…

前端筆記01---html 的加載

文章目錄 HTML<meta><script>MIME CSSHTML 與 DOM 有什么不同MDNMozilla 臟檢查依賴注入虛擬 DOM虛擬DOM性能開銷 性能性能開銷包括哪些方面性能瓶頸性能&#xff1f; 事件事件委托事件冒泡passive: true 合成器線程 HTML html head <meta> <meta> 元素…

貪心算法介紹

貪心算法是一種在求解問題時總是做出在當前看來是最好的選擇的算法。它不從整體最優上加以考慮&#xff0c;所做出的選擇只是在某種意義上的局部最優解。貪心算法不是對所有問題都能得到整體最優解&#xff0c;關鍵是貪心策略的選擇&#xff0c;選擇的貪心策略必須具備無后效性…

K8S相關小技巧《五》

需求&#xff1a; 作為Kubernetes管理員&#xff0c;前一段時間有收到一個需求&#xff0c;需要創建一個可用的storage class&#xff0c;用于提供給給隔離的用戶使用共享磁盤。共享磁盤為NFS磁盤&#xff0c;本例以NFS為例&#xff0c;其他類型的storage class創建也是類似&a…

模型優化_如何提高網絡/模型的泛化能力?(全面)

目錄 1. 以數據為中心的泛化方法 1.1 使用更多數據 1.2 做好數據預處理 特征工程 1.3 數據增強 1.4 調整數據分布 2. 以模型為中心的泛化方法 2.1 使用更大批次 超參數調優 2.2 調整目標函數 2.3 調整網絡結構 2.4 屏蔽網絡節點 2.5 權值正則化 2.6 偏差-方差權衡…

防考試作弊切屏

防考試作弊切屏 方法一&#xff1a;監聽頁面失焦聚焦事件&#xff1a;防止任何操作 監聽考試頁面失焦事件記錄切出時間頁面聚焦時累積記錄切入時間&#xff0c;累積時間大于1分鐘自動交卷并移除時間頁面銷毀移出事件***bug&#xff1a;必須把事件回調定義為方法&#xff0c;在…

全國夜間燈光指數數據、GDP密度分布、人口密度分布、土地利用數據、降雨量數據

引言 DMSP/OLS的1992-2013年全球遙感影像&#xff0c;包括三種非輻射定標的夜間燈光影像。三種全年平均影像分別是&#xff1a;無云觀測頻數影像、平均燈光影像和穩定燈光影像。目前地理遙感生態網可提供全國穩定燈光影像免費下載。穩定燈光影像是標定夜間平均燈光強度的年度柵…

【論文閱讀筆記】Explicit Visual Prompting for Low-Level Structure Segmentations

1.介紹 Explicit Visual Prompting for Low-Level Structure Segmentations 低級結構分割的顯式視覺提示 2023年發表在IEEE CVPR Paper Code 2.摘要 檢測圖像中低級結構&#xff08;低層特征&#xff09;一般包括分割操縱部分、識別失焦像素、分離陰影區域和檢測隱藏對象。雖…

c# Excel轉換成DataTable

/// <summary> /// Excel轉換成DataTable&#xff08;.xls&#xff09; /// </summary> /// <param name"filePath">Excel文件路徑</param> /// <returns></returns> public static Da…

人造太陽光熱模擬能量密度太陽模擬器

人造太陽模擬器其他名稱&#xff1a;能量密度太陽能光熱模擬能量密度太陽模擬器、能流密度太陽光模擬器、高通量太陽模擬器 高通量能留密度太陽能爐和太陽光模擬器產生高度集中的太陽能和人造光&#xff0c;用于新技術和材料的研究和測試。這使研究人員能夠進行制氫實驗、太陽…

備戰藍橋杯---線段樹基礎1

引入&#xff1a;RMQ問題&#xff1a; 什么是RMQ&#xff1f; 顯然&#xff0c;我們無法用前綴維護&#xff0c;因此&#xff0c;我們需要用到線段樹的知識&#xff1a; 什么是線段樹&#xff1f; 線段樹是用一種樹狀結構存儲一個連續區間信息的數據結構 下面我們用圖解釋用…

C++知識點總結(22):模擬算法真題 ★★★★☆《越野比賽》

二、越野比賽 1. 審題 題目描述 最近賽車手 K a l n Kaln Kaln 加入了心心念念的 F a r Far Far 車隊&#xff0c;馬上就迎來了自己的首秀&#xff0c;參加一場直線加速賽&#xff1a;已知 F a r Far Far 車隊會提供 n n n 種類型的賽車&#xff0c; K a l n Kaln Kaln 只…

【數據結構】隊列OJ題《用隊列實現棧》(題庫+解析+代碼)

1.前言 通過前面隊列的實現和詳解大家對隊列應該有一定熟悉了&#xff0c;現在上強度開始做題吧 隊列詳解&#xff1a;http://t.csdnimg.cn/dvTsW 2.OJ題目訓練225. 用隊列實現棧 題目分析 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0…

git 設置代理 取消代理

設置代理 git config --global http.proxy 127.0.0.1:7890 git config --global https.proxy 127.0.0.1:7890注意&#xff1a;加上 --global 是對 git 設置全局代理&#xff0c;不加 --global 對指定倉庫目錄設置代理&#xff0c;局部代理 查看已修改 git 配置信息 git conf…