Java真題實練掌握哈希表的使用
1.多數(shù)元素
題目描述
思路詳解
這個思路比較簡單,先排序,排序過后遍歷如果后一個等于前一個輸出就好
代碼與結(jié)果
class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length / 2]; } }
2.數(shù)組中的k-diff數(shù)對
題目描述
思路詳解
這里我們采用排序和雙指針的方法。
我們首先把數(shù)組進行排序,然后利用前后兩個指針遍歷數(shù)組,找出符合條件的組合。
注意:這里我們我們要注意結(jié)果的重復,也要注意兩個指針前進的條件。
代碼與結(jié)果
class Solution { public int findPairs(int[] nums, int k) { Arrays.sort(nums); int n = nums.length, y = 0, res = 0; for (int x = 0; x < n; x++) { if (x == 0 || nums[x] != nums[x - 1]) { while (y < n && (nums[y] < nums[x] + k || y <= x)) { y++; } if (y < n && nums[y] == nums[x] + k) { res++; } } } return res; } }
3.缺失的第一個正數(shù)
題目描述
思路詳解
這一題屬于比較困難的題目。
我們首先想到的就是排序然后遍歷,可是這違背了題目時間復雜度是常數(shù)的要求。
那么我們用哈希表進行存儲遍歷呢,顯然這也超出了時間復雜度的限制。
小編也是參考了題解,現(xiàn)在就來用自己的話說說這一題的做法吧.
對數(shù)組進行遍歷,對于遍歷到的數(shù) x,如果它在[1,N] 的范圍內(nèi),那么就將數(shù)組中的第x−1 個位置(注意:數(shù)組下標從 0 開始)打上「標記」。在遍歷結(jié)束之后,如果所有的位置都被打上了標記,那么答案是N+1,否則答案是最小的沒有打上標記的位置加 1。
這里是采用了仿哈希表的結(jié)構(gòu)。
代碼與結(jié)果
class Solution { public int firstMissingPositive(int[] nums) { int n = nums.length; for (int i = 0; i < n; ++i) { if (nums[i] <= 0) { nums[i] = n + 1; } } for (int i = 0; i < n; ++i) { int num = Math.abs(nums[i]); if (num <= n) { nums[num - 1] = -Math.abs(nums[num - 1]); } } for (int i = 0; i < n; ++i) { if (nums[i] > 0) { return i + 1; } } return n + 1; } }
到此這篇關于Java真題實練掌握哈希表的使用的文章就介紹到這了,更多相關Java哈希表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot以Repository方式整合Redis的方法
這篇文章主要介紹了Springboot以Repository方式整合Redis的方法,本文通過圖文并茂實例詳解給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04徹底理解Spring注解@Autowired實現(xiàn)原理
這篇文章主要為大家詳細的介紹了Spring注解@Autowired實現(xiàn)的原理,縝密的邏輯分析,實踐應用示例操作說明,讓大家徹底的理解Spring注解@Autowired背后實現(xiàn)原理2022-03-03Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解
今天小編就為大家分享一篇關于Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01