程序员面临着知识总结和学习,是不是纠结知识点没有那么容易掌握,乱七八糟分散你的注意力,今天我给大家分享一个项目,覆盖计算机知识最全面的聚集地,只要你拥有了它,学习在也不是难事。
技术面试必备基础知识、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 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
<code>Input:{2, 3, 1, 0, 2, 5}Output:2/<code>
解题思路
要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。
对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第 i 个位置上进行求解。本题要求找出重复的数字,因此在调整过程中,如果第 i 位置上已经有一个值为 i 的元素,就可以知道 i 值重复。
以 (2, 3, 1, 0, 2, 5) 为例,遍历到位置 4 时,该位置上的数为 2,但是第 2 个位置上已经有一个 2 的值了,因此可以知道 2 重复:
<code>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;}/<code>
更多的面试题,更多的DEMO,更多的知识点,请大家看评论区给了项目地址,谢谢大家了。
閱讀更多 技術剛剛好 的文章