leetcode 164. 最大間距(桶排序)

給定一個無序的數組,找出數組在排序之后,相鄰元素之間最大的差值。

如果數組元素個數小于 2,則返回 0。

示例 1:

輸入: [3,6,9,1]
輸出: 3
解釋: 排序后的數組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。
示例 2:

輸入: [10]
輸出: 0
解釋: 數組元素個數小于 2,因此返回 0。
說明:

你可以假設數組中所有元素都是非負整數,且數值在 32 位有符號整數范圍內。
請嘗試在線性時間復雜度和空間復雜度的條件下解決此問題。

一個桶代表的是一個區間,根據數組元素的大小劃分到不同的桶里面,采用一個二維數組維護一個桶內的最大值和最小值,因為桶內的區間劃分的時候是最小間隔(反證法可得),所以不需要考慮桶內的差值,只需要計算桶間的最大差值。

代碼

class Solution {public int maximumGap(int[] nums) {int n = nums.length;if (n < 2) return 0;int max = Arrays.stream(nums).max().getAsInt();int min = Arrays.stream(nums).min().getAsInt();//劃分區間int gap = Math.max((max - min)/(n - 1),1);//找出最小的區間間隔int size = (max - min) / gap + 1;//桶的數量int[][] bucket = new int[size][2];for (int i = 0; i < size; i++) Arrays.fill(bucket[i], -1);//空桶設為-1for (int i = 0; i < n; i++) {int cur = (nums[i] - min) / gap;//當前元素所要放置的桶的序號if (bucket[cur][0] == -1) {//桶是空的,直接插入bucket[cur][0] = bucket[cur][1] = nums[i];} else {bucket[cur][0] = Math.min(nums[i], bucket[cur][0]);//更新桶內的最大最小值bucket[cur][1] = Math.max(nums[i], bucket[cur][1]);}}int res =0, pre = -1;for (int i = 0; i < size; i++)//遍歷所有桶,找出桶間最大間隔,空桶忽略不計{if(bucket[i][0]==-1) continue;if(pre!=-1) res= Math.max(res,bucket[i][0]-bucket[pre][1]);pre=i;}return res;}
}

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

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

相關文章

批處理定時mysql備份數據庫_定時備份mysql數據庫的批處理

定時備份mysql數據庫的批處理代碼&#xff0c;保存為backup_mysql.bat&#xff0c;運行即可。復制代碼 代碼如下:echo offset txt1%date:~0,4%::當前年set txt2%date:~5,2%::當前月set txt3%date:~8,2%::當前日set txt4%time:~0,2%::當前小時set txt5%time:~3,2%::當前分鐘set …

算法訓練營 重編碼_您在編碼訓練營期間可能面臨的最大挑戰

算法訓練營 重編碼by Joanna Gaudyn喬安娜高登(Joanna Gaudyn) 您在編碼訓練營期間可能面臨的最大挑戰 (The biggest struggles you might face during a coding bootcamp) You think that during a coding bootcamp nothing can be more challenging than learning programmi…

1449 砝碼稱重(思維)

題目鏈接&#xff1a;https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId259281 題解&#xff1a;這題有一個技巧&#xff0c;畢竟是w^0,w^1,w^2....這樣&#xff0c;必然會想到w進制&#xff0c;而且就只能用一次。 那么就簡單了&#xff0c;把m拆成w進制&#xf…

leetcode 454. 四數相加 II(哈希表)

給定四個包含整數的數組列表 A , B , C , D ,計算有多少個元組 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 為了使問題簡單化&#xff0c;所有的 A, B, C, D 具有相同的長度 N&#xff0c;且 0 ≤ N ≤ 500 。所有整數的范圍在 -228 到 228 - 1 之間&#xf…

“換標”Intel的窮則思變

成語有云“窮則思變”&#xff0c;用這個詞來形容早先的Intel換標也最恰當不過。當然這里“窮”&#xff0c;不是說Intel很貧窮&#xff0c;而是說Intel在自己的產業到了盡頭。Intel推產品概念的水平是一流的&#xff0c;雖然某些概念事后被認為是錯誤的&#xff08;如&#xf…

mysql開發中遇到的坑_mysql優化過程中遇見的坑(mysql優化問題特別注意)

單條查詢最后添加 LIMIT 1&#xff0c;停止全表掃描。對于char(4) 或者vachar(4)&#xff0c;無論是中文還是英文都是存儲四個字符&#xff0c;注意是字符而不是字節。如果一個字段未int類型&#xff0c;此類型只有0、1兩個狀態&#xff0c;需要為此建立索引嗎&#xff1f;過度…

初級開發人員的缺點_在您作為初級開發人員的第一年獲得此建議

初級開發人員的缺點Are you a junior developer embarking on your software development career?您是從事軟件開發事業的初級開發人員嗎&#xff1f; Or a recent computer science graduate who has recently started a new job?還是最近剛開始從事新工作的計算機科學專業…

Spark日志分析

根據tomcat日志計算url訪問了情況&#xff0c;具體的url如下&#xff0c; 要求&#xff1a;區別統計GET和POST URL訪問量 結果為&#xff1a;訪問方式、URL、訪問量 輸入文件&#xff1a; 196.168.2.1 - - [03/Jul/2014:23:36:38 0800] "GET /course/detail/3.htm HTTP/1.…

進程、線程和協程的區別

首先&#xff0c;給出“進程、線程和協程”的特點&#xff1a; 進程&#xff1a;擁有自己獨立的堆和棧&#xff0c;既不共享堆&#xff0c;也不共享棧&#xff0c;進程由操作系統調度&#xff1b;線程&#xff1a;擁有自己獨立的棧和共享的堆&#xff0c;共享堆&#xff0c;不共…

leetcode 493. 翻轉對(分治算法)

給定一個數組 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我們就將 (i, j) 稱作一個重要翻轉對。 你需要返回給定數組中的重要翻轉對的數量。 示例 1: 輸入: [1,3,2,3,1] 輸出: 2 代碼 class Solution {public int reversePairs(int[] nums) {return getR…

使用brew安裝軟件

brew 又叫Homebrew&#xff0c;是Mac OSX上的軟件包管理工具&#xff0c;能在Mac中方便的安裝軟件或者卸載軟件&#xff0c; 只需要一個命令&#xff0c; 非常方便 brew類似ubuntu系統下的apt-get的功能 閱讀目錄 安裝brew 使用brew安裝軟件 使用brew卸載軟件 使用brew查詢軟…

mysql 繞過select報錯_MySQL注射繞過技巧(三)

在測試一次注入的時候發現過濾了逗號 所以找到這個思路第一次遇到的時候是看key哥挖洞 遇到后就想記錄下來正文過濾了逗號 利用join來逐步查詢select*from(select 1)a join (select 2)b join (select 3)c;例如下圖逐步查詢user()user() basediruser() basedir version()也可以…

深入理解javascript

深入理解JavaScript系列&#xff08;1&#xff09;&#xff1a;編寫高質量JavaScript代碼的基本要點 深入理解JavaScript系列&#xff08;2&#xff09;&#xff1a;揭秘命名函數表達式 深入理解JavaScript系列&#xff08;3&#xff09;&#xff1a;全面解析Module模式 深入理…

spark 并行處理_如何使用Spark集群并行處理大數據

spark 并行處理by Hari Santanam通過Hari Santanam 如何使用Spark集群并行處理大數據 (How to use Spark clusters for parallel processing Big Data) 將Apache Spark的彈性分布式數據集(RDD)與Databricks一起使用 (Use Apache Spark’s Resilient Distributed Dataset (RDD)…

django前后端分離部署

部署靜態文件&#xff1a; 靜態文件有兩種方式1&#xff1a;通過django路由訪問2&#xff1a;通過nginx直接訪問 方式1&#xff1a; 需要在根目錄的URL文件中增加&#xff0c;作為入口 url(r^$, TemplateView.as_view(template_name"index.html")), 在setting中更改靜…

Citrix、Microsoft、VMware虛擬桌面之網頁接口登錄對比

軟件環境 Citrix Xendesktop 5.6 Microsoft Windows Server 2008 R2 Hyper-v VMware View client 4.6 首先看citrix的&#xff0c;很早之前Citrix就推出了網頁的虛擬桌面和應用程序&#xff0c;默認是單點登錄獲取桌面 下面是微軟的&#xff0c;和citrix很類似&#xff0c; 據我…

leetcode 976. 三角形的最大周長

給定由一些正數&#xff08;代表長度&#xff09;組成的數組 A&#xff0c;返回由其中三個長度組成的、面積不為零的三角形的最大周長。 如果不能形成任何面積不為零的三角形&#xff0c;返回 0。 示例 1&#xff1a; 輸入&#xff1a;[2,1,2] 輸出&#xff1a;5 示例 2&…

recyclerview 加載fragment_恢復 RecyclerView 的滾動位置

您可能在開發過程中遇到過這種情況&#xff0c;在 Activity/Fragment 被重新創建后&#xff0c;RecyclerView 丟失了它之前保有的滾動位置信息。通常這種情況發生的原因是由于異步加載 Adapter 數據&#xff0c;且數據在 RecyclerView 需要進行布局的時候尚未加載完成&#xff…

4.6.2 軟件測試的步驟

系統測試是可有可無的。因為系統測試是和環境結合在一起。系統測試應該是在系統設計或者是需求分析階段的前一步來完成的。 單元測試它的測試計劃是在詳細設計階段完成。所以說單元測試的計劃是在詳細設計階段來完成的。 模塊接口的測試它保證了測試模塊的數據流可以正確地流入…

nodejs調試ndb_如何開始使用NDB調試NodeJS應用程序

nodejs調試ndbNodeJs was released almost 9 years ago. The default debugging process of NodeJs (read Node.js) is quite clumsy. You are likely already aware of the need to add --inspect to the node script with node inspector. It is also dependent on Chrome. T…