当前位置:网站首页>Written interview questions: find the smallest positive integer missing
Written interview questions: find the smallest positive integer missing
2020-11-08 10:30:00 【osc_redits】
Original published in :
The National Day holiday is over half . today , Let's take a look at one leetcode problem , It was the same year B Interview questions for the company , Difficult . Questions as follows :
Given an array of integers , Find the smallest missing positive integer , The required time complexity is O(n), The space complexity is O(1). The input and output examples are as follows :
Input array a | Output |
[1, 2, 0] | 3 |
[3, 4, 1, -1] | 2 |
[6, 7, 8, 12] | 1 |
Let's analyze first :
A. hypothesis a Medium n It's full of elements 1~n, Then the missing smallest positive integer is n+1.
B. hypothesis a Medium n The elements are not fully occupied 1~n, Then the missing smallest positive integer must be 1~n Some number between .
comprehensive A and B You know : The missing smallest positive integer must be in the interval [1, n+1] in . This is a very important conclusion .
Algorithm 1: The brute force algorithm
The brute force algorithm is simple , Traversing the interval directly [1, n+1], Then determine whether the element is in a in . here , The time complexity is O(n*n), The space complexity is O(1).
obviously , Can't pass the interview .
Algorithm 2: The hash algorithm
From the violence algorithm we can see that , It's nothing more than a search question , Then consider hash table . That is the a Arrays are recorded in hash tables , And then we traverse the interval directly [1, n+1], You can determine whether the element is in the hash table . here , Time complexity and space complexity are both O(n).
obviously , Can't pass the interview .
Algorithm 3: Clever marking
We refer to Algorithms 2, And make clever optimization when marking the existence of elements .
With a = [3, 4, 1, -1] For example ,n = 4, The process is as follows :
The original array | [3, 4, 1, -1] |
Change the non positive number to n+1 | [3, 4, 1, 5] |
3 There is , use a[3-1] The negative sign of | [3, 4, -1, 5] |
4 There is , use a[4-1] The negative sign of | [3, 4, -1, -5] |
1 There is , use a[1-1] The negative sign of | [-3, 4, -1, -5] |
a[x-1]=4, Positive number , so x There must not be | x=2 Is the missing smallest positive integer |
You can see , In the record element x If it exists , It uses a[x - 1] The symbol of , among ,x The interval of is [1, n]. The time complexity of the algorithm is O(n), The space complexity is O(1), It fully meets the requirements of the topic . This kind of marking is very clever , And it's really not easy to think of .
Now that the steps of the algorithm are determined , So the corresponding program is relatively simple , Take a look at :
package main
import "fmt"
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
func solution(a []int) int {
n := len(a)
for i := 0; i < n; i++ {
if a[i] <= 0 {
a[i] = n + 1
}
}
for i := 0; i < n; i++ {
num := abs(a[i])
if num <= n {
a[num - 1] = -abs(a[num - 1])
}
}
for i := 0; i < n; i++ {
if a[i] > 0 {
return i + 1
}
}
return n + 1
}
func main() {
a := []int{3, 4, 1, -1}
fmt.Println(solution(a))
}
result :2
Algorithm 4: Displacement and homing
Algorithm 3 It's hard to think of , So let's look at more intuitive ideas . For arrays a The elements of i, If i In the interval [1, n] in , Can be returned by replacement , hold i Put it in a[i-1] It's about , as follows :
Input array a | Replace the goal |
[1, 2, 0] | [1, 2, 0] |
[3, 4, 1, -1] | [1, -1, 3, 4] |
[6, 7, 8, 12] | [6, 7, 8, 12] |
After replacement , Traverse... Again a, If a[x-1] and x It's not equal , that ,x It must be the missing smallest positive integer , as follows :
Replace the goal | x( The missing smallest positive integer ) |
[1, 2, 0] | 3 |
[1, -1, 3, 4] | 2 |
[6, 7, 8, 12] | 1 |
The time complexity of the algorithm is O(n), The space complexity is O(1), It fully meets the requirements of the topic . Now that the algorithm is determined , So the corresponding program is relatively simple , as follows :
package main
import "fmt"
func solution(a []int) int {
n := len(a)
for i := 0; i < n; i++ {
// Be careful : Here we're going to use for, instead of if.
for a[i] > 0 && a[i] <= n && a[a[i]-1] != a[i] {
a[a[i]-1], a[i] = a[i], a[a[i]-1]
}
}
for i := 0; i < n; i++ {
if a[i] != i + 1 {
return i + 1
}
}
return n + 1
}
func main() {
a := []int{3, 4, 1, -1}
fmt.Println(solution(a))
}
result :2
in summary : Algorithm 1 Sum algorithm 2 Can't pass the interview , Algorithm 3 Sum algorithm 4 You can go through an interview . among , Algorithm 3 It's rather winding , It's not easy to think of . By comparison , Algorithm 4 Intuitive and easy to understand , In the implementation of the program to pay attention to the inner layer to use for, instead of if.
overall ,B The company's interview requirements are still very high , I wish you all the best offer.
版权声明
本文为[osc_redits]所创,转载请带上原文链接,感谢
边栏推荐
- 阅读心得:FGAGT: Flow-Guided Adaptive Graph Tracking
- AMD Zen3首发评测:频率超5GHz,IPC提升不止19%,这次真的Yes了 - 知乎
- Istio流量管理--Ingress Gateway
- Japan PSE certification
- 攻防世界之web新手题
- python学习 day1——基础学习
- C语言I博客作业03
- Distributed consensus mechanism
- 你搞不懂与别人的差距,永远成不了架构师!月薪15K和月薪65K,你差在那了?
- Visual studio 2015 unresponsive / stopped working problem resolution
猜你喜欢
More than 50 object detection datasets from different industries
Can you do it with only six characters?
Python3.9的7个特性
Adobe Lightroom /Lr 2021软件安装包(附安装教程)
游戏优化性能杂谈(十一) - 知乎
PX4添加新的应用
Is software testing training class easy to find a job
函数周期表丨筛选丨值丨SELECTEDVALUE - 知乎
5G+AR出圈,中国移动咪咕成第33届中国电影金鸡奖全程战略合作伙伴
Insight -- the application of sanet in arbitrary style transfer
随机推荐
Distributed consensus mechanism
SQL Server 2008R2 18456 error resolution
来自不同行业领域的50多个对象检测数据集
Python3.9的7个特性
一个方案提升Flutter内存利用率
IQKeyboardManager 源代码看看
解决RabbitMQ消息丢失与重复消费问题
python小工具:编码转换
NOIP 2012 提高组 复赛 第一天 第二题 国王游戏 game 数学推导 AC代码(高精度 低精度 乘 除 比较)+60代码(long long)+20分代码(全排列+深搜dfs)
5G+AR出圈,中国移动咪咕成第33届中国电影金鸡奖全程战略合作伙伴
PCIe enumeration process
Spotify是如何推动数据驱动决策的?
Adobe Prelude /Pl 2020软件安装包(附安装教程)
Basic concepts of computer network (5) basic principles of local area network
函数周期表丨筛选丨值丨SELECTEDVALUE - 知乎
Iqkeyboardmanager source code to see
抖音直播监控Api:随机推荐
蓝牙2.4G产品日本MIC认证的测试要求
2020-11-05
ulab 1.0.0发布