面试:数组: 首个正数
来源:互联网 发布:什么是网络超市? 编辑:程序博客网 时间:2024/06/08 03:28
题目
给定一个无序的整型数组,找出第一个不在数组里的正整数。要求时间复杂度是 O (n),空间复杂度是O(1)
- 例子
输入数组{5,3,-1,1}
返回 2
算法
- 借助哈希思想
- 数组小标存储相应的值: A[K-1]=K
- 对于大于数组长度和小于1的数字抛弃;
- 有了新数组就从头开始,遇到第一个A[k-1] 不等于k的,则输出k
- 如果没有遇到只能是数组长度的下一个整数
{1,2,3,4} ;则返回5
import java.util.*;class Solution{ public int firstMissingPositive(int[] A){ int n=A.length; for(int i=0;i<n;++i){ if(A[i]>0 && A[i]<=n){ if(A[i]-1 !=i && A[A[i]-1]!=A[i]){ // 交换相应的值 int temp=A[A[i]-1]; A[A[i]-1]=A[i]; A[i]=temp; // 交换后还需要对新的A[i] 重新判断 i--; } } } for(int i=0;i<n;++i) //输出第一个不匹配的数字 if(A[i]-1 !=i) return i+1; //若未找到 return n+1; }}
0 0
- 面试:数组: 首个正数
- 首个正数,给定一个无序整形数组,找出第一个不在数组里的正整数。要求时间复杂度0(n),空间复杂度o(1)
- 数组里的正数和负数排序
- 数组里的正数和负数排序
- 正数数组的最小不可组成和
- 寻找第一个丢失的正数
- leetcode题目 丢失的第一个正数
- 码农谷第一个没出现的正数
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
- 【C语言】输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 一个整形数组中有正数也有负数, 数组中连续一个或多个组成子数组,每个子数组都有一个和, 求所有子数组中和的最大值
- 求正数数组的子数组之和等于给定值
- 面试:数组:数组配对
- 汇编语言数组中查找正数代码分析(3)
- 第96讲 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统(数据库)中
- Torch深度学习入门
- SQL表连接查询(inner join、full join、left join、right join)
- 定义搞错了
- Linux下ln命令使用
- 面试:数组: 首个正数
- 第10.11周-补充1
- linux root执行/media可执行文件权限不够,chmod修改权限无效
- unity 刚体的旋转
- Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局
- ubuntu14.10安装五笔\拼音中文输入法--不适用于16.04
- Strategy Design Pattern
- .gradle的学习总结(一)
- 在Linux下搭建dubbo管理控制台