程式設計師面臨著知識總結和學習,是不是糾結知識點沒有那麼容易掌握,亂七八糟分散你的注意力,今天我給大家分享一個項目,覆蓋計算機知識最全面的聚集地,只要你擁有了它,學習在也不是難事。
技術面試必備基礎知識、Leetcode、計算機作業系統、計算機網絡、系統設計、Java、Python、C++
本項目包含了技術面試必備的基礎知識,內容淺顯易懂,你不需要花很長的時間去閱讀和理解成堆的技術書籍就可以快速掌握這些知識,從而節省寶貴的面試複習時間。
目錄結構
如果你是一名開發程式設計師,我想這個項目不可不得,大類有:
- 算法
- 作業系統
- 網絡
- 面向對象
- 資料庫
- java
- 系統設計
- 工具
✏️ 算法
- 劍指 Offer 題解
- Leetcode 題解
- 算法
- 後端面試進階指南
作業系統
- 計算機作業系統
- Linux
☁️ 網絡
- 計算機網絡
- HTTP
- Socket
面向對象
- 設計模式
- 面向對象思想
資料庫
- 資料庫系統原理
- SQL
- Leetcode-Database 題解
- MySQL
- Redis
☕️ Java
- Java 基礎
- Java 容器
- Java 並發
- Java 虛擬機
- Java I/O
系統設計
- 系統設計基礎
- 分布式
- 集群
- 攻擊技術
- 緩存
- 消息隊列
工具
- Git
- Docker
- 正則表達式
- 構建工具
數組中重複的數字
題目連結
牛客網
題目描述
在一個長度為 n 的數組裡的所有數字都在 0 到 n-1 的範圍內。數組中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。請找出數組中任意一個重複的數字。
Input:
{2, 3, 1, 0, 2, 5}
Output:
2
解題思路
要求時間複雜度 O(N),空間複雜度 O(1)。因此不能使用排序的方法,也不能使用額外的標記數組。
對於這種數組元素在 [0, n-1] 範圍內的問題,可以將值為 i 的元素調整到第 i 個位置上進行求解。本題要求找出重複的數字,因此在調整過程中,如果第 i 位置上已經有一個值為 i 的元素,就可以知道 i 值重複。
以 (2, 3, 1, 0, 2, 5) 為例,遍歷到位置 4 時,該位置上的數為 2,但是第 2 個位置上已經有一個 2 的值了,因此可以知道 2 重複:
public boolean duplicate(int[] nums, int length, int[] duplication) {
if (nums == null || length <= 0)
return false;
for (int i = 0; i < length; i++) {
while (nums[i] != i) {
if (nums[i] == nums[nums[i]]) {
duplication[0] = nums[i];
return true;
}
swap(nums, i, nums[i]);
}
}
return false;
}
private void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
更多的面試題,更多的DEMO,更多的知識點,請大家看評論區給了項目地址,謝謝大家了。