H*e
2 楼
O(n) time, O(1) space?
题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
integer。
比如[1,2,0] return 3, [3,4,-1,1] return 2
题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
integer。
比如[1,2,0] return 3, [3,4,-1,1] return 2
c*9
4 楼
有,之前看到过,就是走一遍,遇到a[i]!=i; swap(a[a[i]] a[i]) 走一遍后第一个a[
i]!=i的就是
//Input Array:get first positive number that is not in the array
int getfirstpositive(int* a, int len)
{
int i=0;
while(i {
int m= a[i];
if (m>=0&&m {
int tmp;
tmp = a[m];
a[m] = m;
a[i] = tmp;
}
else
i++;
}
for (i=1;i {
if (a[i]!=i)
{
return i;
}
}
if(a[0] == len)
return len+1;
else
return len;
}
i]!=i的就是
//Input Array:get first positive number that is not in the array
int getfirstpositive(int* a, int len)
{
int i=0;
while(i
int m= a[i];
if (m>=0&&m
int tmp;
tmp = a[m];
a[m] = m;
a[i] = tmp;
}
else
i++;
}
for (i=1;i
if (a[i]!=i)
{
return i;
}
}
if(a[0] == len)
return len+1;
else
return len;
}
e*l
11 楼
[2,1,2] 死循环?
R*9
17 楼
int SmallestMissingPositive(int a[], int n)
{
int i = 0;
int min = MAXINT;
while(i<=n-1){
if(a[i]<=0 || a[i]>n){
a[i] = a[n-1];
n--;
}else{
min = mini++;
}
}
return min;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
{
int i = 0;
int min = MAXINT;
while(i<=n-1){
if(a[i]<=0 || a[i]>n){
a[i] = a[n-1];
n--;
}else{
min = mini++;
}
}
return min;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
G*s
21 楼
此题是 given int array in range [1,N],find missing integer的变形吧,
in my opinion
扫描的时候, 用bitmap来mark seen positive ints,略过non-positive的integer,
assume 有k个positive ints, O(n) mark positives,O(k) find first missing int,
gives us O(n+k).
不知道这样做是否妥当和最有呢
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
in my opinion
扫描的时候, 用bitmap来mark seen positive ints,略过non-positive的integer,
assume 有k个positive ints, O(n) mark positives,O(k) find first missing int,
gives us O(n+k).
不知道这样做是否妥当和最有呢
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
g*y
23 楼
public int find(int[] a) {
int least = a.length;
for (int i=a.length-1; i>=0; i--) {
if (a[i]<=0 || a[i]>i+1) {
least = i;
continue;
}
if (a[i] != i+1) {
if (a[i] == a[a[i]-1]) {
least = i;
}
else {
int t = a[i]-1;
a[i] = a[t];
a[t] = t+1;
i++;
}
}
}
return least+1;
}
int least = a.length;
for (int i=a.length-1; i>=0; i--) {
if (a[i]<=0 || a[i]>i+1) {
least = i;
continue;
}
if (a[i] != i+1) {
if (a[i] == a[a[i]-1]) {
least = i;
}
else {
int t = a[i]-1;
a[i] = a[t];
a[t] = t+1;
i++;
}
}
}
return least+1;
}
c*2
25 楼
g*y
26 楼
http://www.mitbbs.com/article0/JobHunting/31902917_0.html
【在 A**u 的大作中提到】
: 大牛,看不懂
: 可否详解
【在 A**u 的大作中提到】
: 大牛,看不懂
: 可否详解
s*e
27 楼
扫描一遍数组,<=0的数字不管,大于数组长度的数字扔掉,其余的重新排列在数组中
。
扫描第二遍,返回第一个小于等于0的数组index。
int findPosMissing(int* arr, int size) {
for (int i=0; i if (arr[i] == i+1) continue;
int temp = arr[i];
arr[i] = 0;
int temp1;
while (true) {
if (temp <=0 ) break;
if (temp > size ) break;
if (arr[temp-1] == temp) break;
temp1 = arr[temp-1];
arr[temp-1]= temp;
temp = temp1;
}
}
for (int i=0; i if (arr[i]<=0){
return i+1;
}
}
return size+1;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
。
扫描第二遍,返回第一个小于等于0的数组index。
int findPosMissing(int* arr, int size) {
for (int i=0; i
int temp = arr[i];
arr[i] = 0;
int temp1;
while (true) {
if (temp <=0 ) break;
if (temp > size ) break;
if (arr[temp-1] == temp) break;
temp1 = arr[temp-1];
arr[temp-1]= temp;
temp = temp1;
}
}
for (int i=0; i
return i+1;
}
}
return size+1;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
i*e
29 楼
他代码没问题,这里handle了:
if (temp <=0 ) break;
if (temp > size ) break;
另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
这个思路是挺简洁的):
int firstMissingPositive(int A[], int n) {
if (n == 0) return 1;
for (int i = 0; i < n; i++)
while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
swap(A[i], A[A[i]]);
for (int i = 1; i < n; i++)
if (A[i] != i) return i;
return (A[0] == n) ? n+1 : n;
}
【在 P*A 的大作中提到】
: if (arr[i]<=0) 有问题,没考虑arr[i]>n
: 应该改成 if(arr[i]!=i+1)
if (temp <=0 ) break;
if (temp > size ) break;
另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
这个思路是挺简洁的):
int firstMissingPositive(int A[], int n) {
if (n == 0) return 1;
for (int i = 0; i < n; i++)
while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
swap(A[i], A[A[i]]);
for (int i = 1; i < n; i++)
if (A[i] != i) return i;
return (A[0] == n) ? n+1 : n;
}
【在 P*A 的大作中提到】
: if (arr[i]<=0) 有问题,没考虑arr[i]>n
: 应该改成 if(arr[i]!=i+1)
H*e
30 楼
O(n) time, O(1) space?
题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
integer。
比如[1,2,0] return 3, [3,4,-1,1] return 2
题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
integer。
比如[1,2,0] return 3, [3,4,-1,1] return 2
c*9
31 楼
有,之前看到过,就是走一遍,遇到a[i]!=i; swap(a[a[i]] a[i]) 走一遍后第一个a[
i]!=i的就是
//Input Array:get first positive number that is not in the array
int getfirstpositive(int* a, int len)
{
int i=0;
while(i {
int m= a[i];
if (m>=0&&m {
int tmp;
tmp = a[m];
a[m] = m;
a[i] = tmp;
}
else
i++;
}
for (i=1;i {
if (a[i]!=i)
{
return i;
}
}
if(a[0] == len)
return len+1;
else
return len;
}
i]!=i的就是
//Input Array:get first positive number that is not in the array
int getfirstpositive(int* a, int len)
{
int i=0;
while(i
int m= a[i];
if (m>=0&&m
int tmp;
tmp = a[m];
a[m] = m;
a[i] = tmp;
}
else
i++;
}
for (i=1;i
if (a[i]!=i)
{
return i;
}
}
if(a[0] == len)
return len+1;
else
return len;
}
e*l
36 楼
[2,1,2] 死循环?
R*9
42 楼
int SmallestMissingPositive(int a[], int n)
{
int i = 0;
int min = MAXINT;
while(i<=n-1){
if(a[i]<=0 || a[i]>n){
a[i] = a[n-1];
n--;
}else{
min = mini++;
}
}
return min;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
{
int i = 0;
int min = MAXINT;
while(i<=n-1){
if(a[i]<=0 || a[i]>n){
a[i] = a[n-1];
n--;
}else{
min = mini++;
}
}
return min;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
G*s
46 楼
此题是 given int array in range [1,N],find missing integer的变形吧,
in my opinion
扫描的时候, 用bitmap来mark seen positive ints,略过non-positive的integer,
assume 有k个positive ints, O(n) mark positives,O(k) find first missing int,
gives us O(n+k).
不知道这样做是否妥当和最有呢
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
in my opinion
扫描的时候, 用bitmap来mark seen positive ints,略过non-positive的integer,
assume 有k个positive ints, O(n) mark positives,O(k) find first missing int,
gives us O(n+k).
不知道这样做是否妥当和最有呢
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
g*y
48 楼
public int find(int[] a) {
int least = a.length;
for (int i=a.length-1; i>=0; i--) {
if (a[i]<=0 || a[i]>i+1) {
least = i;
continue;
}
if (a[i] != i+1) {
if (a[i] == a[a[i]-1]) {
least = i;
}
else {
int t = a[i]-1;
a[i] = a[t];
a[t] = t+1;
i++;
}
}
}
return least+1;
}
int least = a.length;
for (int i=a.length-1; i>=0; i--) {
if (a[i]<=0 || a[i]>i+1) {
least = i;
continue;
}
if (a[i] != i+1) {
if (a[i] == a[a[i]-1]) {
least = i;
}
else {
int t = a[i]-1;
a[i] = a[t];
a[t] = t+1;
i++;
}
}
}
return least+1;
}
c*2
50 楼
g*y
51 楼
http://www.mitbbs.com/article0/JobHunting/31902917_0.html
【在 A**u 的大作中提到】
: 大牛,看不懂
: 可否详解
【在 A**u 的大作中提到】
: 大牛,看不懂
: 可否详解
s*e
52 楼
扫描一遍数组,<=0的数字不管,大于数组长度的数字扔掉,其余的重新排列在数组中
。
扫描第二遍,返回第一个小于等于0的数组index。
int findPosMissing(int* arr, int size) {
for (int i=0; i if (arr[i] == i+1) continue;
int temp = arr[i];
arr[i] = 0;
int temp1;
while (true) {
if (temp <=0 ) break;
if (temp > size ) break;
if (arr[temp-1] == temp) break;
temp1 = arr[temp-1];
arr[temp-1]= temp;
temp = temp1;
}
}
for (int i=0; i if (arr[i]<=0){
return i+1;
}
}
return size+1;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
。
扫描第二遍,返回第一个小于等于0的数组index。
int findPosMissing(int* arr, int size) {
for (int i=0; i
int temp = arr[i];
arr[i] = 0;
int temp1;
while (true) {
if (temp <=0 ) break;
if (temp > size ) break;
if (arr[temp-1] == temp) break;
temp1 = arr[temp-1];
arr[temp-1]= temp;
temp = temp1;
}
}
for (int i=0; i
return i+1;
}
}
return size+1;
}
【在 H***e 的大作中提到】
: O(n) time, O(1) space?
: 题目是给定一个unsorted int array, 怎么找到第一个大于0,并且不在此array的
: integer。
: 比如[1,2,0] return 3, [3,4,-1,1] return 2
i*e
54 楼
他代码没问题,这里handle了:
if (temp <=0 ) break;
if (temp > size ) break;
另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
这个思路是挺简洁的):
int firstMissingPositive(int A[], int n) {
if (n == 0) return 1;
for (int i = 0; i < n; i++)
while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
swap(A[i], A[A[i]]);
for (int i = 1; i < n; i++)
if (A[i] != i) return i;
return (A[0] == n) ? n+1 : n;
}
Edit:
火鸡那个思路很巧妙,学习了!
【在 P*A 的大作中提到】
: if (arr[i]<=0) 有问题,没考虑arr[i]>n
: 应该改成 if(arr[i]!=i+1)
if (temp <=0 ) break;
if (temp > size ) break;
另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
这个思路是挺简洁的):
int firstMissingPositive(int A[], int n) {
if (n == 0) return 1;
for (int i = 0; i < n; i++)
while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
swap(A[i], A[A[i]]);
for (int i = 1; i < n; i++)
if (A[i] != i) return i;
return (A[0] == n) ? n+1 : n;
}
Edit:
火鸡那个思路很巧妙,学习了!
【在 P*A 的大作中提到】
: if (arr[i]<=0) 有问题,没考虑arr[i]>n
: 应该改成 if(arr[i]!=i+1)
h*n
55 楼
你这个怎么看出来是O(n)的复杂度呢
for里面有个while循环,求解
【在 i**********e 的大作中提到】
: 他代码没问题,这里handle了:
: if (temp <=0 ) break;
: if (temp > size ) break;
: 另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
: 这个思路是挺简洁的):
: int firstMissingPositive(int A[], int n) {
: if (n == 0) return 1;
: for (int i = 0; i < n; i++)
: while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
: swap(A[i], A[A[i]]);
for里面有个while循环,求解
【在 i**********e 的大作中提到】
: 他代码没问题,这里handle了:
: if (temp <=0 ) break;
: if (temp > size ) break;
: 另外随手写了一个,基于 cx3959 的思路(除了他没有handle n==0 这个状况之外,他
: 这个思路是挺简洁的):
: int firstMissingPositive(int A[], int n) {
: if (n == 0) return 1;
: for (int i = 0; i < n; i++)
: while (A[i] >= 0 && A[i] < n && A[i] != A[A[i]])
: swap(A[i], A[A[i]]);
w*o
57 楼
受Rebecca9的启发写一个one pass的。把不在[1..n]之内和重复的放到尾部:
public int firstMissingPositive(int[] A) {
// Start typing your Java solution below
// DO NOT write main() function
if(A == null || A.length == 0)
return 1;
int i = 0, n = A.length - 1;
while(i <= n) {
int x = A[i];
if(x == i + 1) {
i++;
continue;
}
if(x <= 0 || x > n + 1|| x == A[x - 1]) {
A[i] = A[n--];
} else {
A[i] = A[x - 1];
A[x - 1] = x;
}
}
return i + 1;
}
public int firstMissingPositive(int[] A) {
// Start typing your Java solution below
// DO NOT write main() function
if(A == null || A.length == 0)
return 1;
int i = 0, n = A.length - 1;
while(i <= n) {
int x = A[i];
if(x == i + 1) {
i++;
continue;
}
if(x <= 0 || x > n + 1|| x == A[x - 1]) {
A[i] = A[n--];
} else {
A[i] = A[x - 1];
A[x - 1] = x;
}
}
return i + 1;
}
相关阅读
中国人应该多多创业,多有自己的公司。。这样才能真正推动new国内有五年IT工作经验的人,能申请senior的工作吗?烙印的找工作论坛呢请问linkedin 的freezing period 多久valid numberOPT 加急问题facebook 对linkedin 下手了。斗胆问一下,对于小硕来说 机器学习 和前端工程师,哪个方向好一些?昨天发FLAG offer求比较的哥们删帖了有人感兴趣吗?Intel提供Google内推挖个坑:收入对应FB多久pay一次?请教 print factors 这个题youtube data scientist 面经碰到安徽土凤凰大学毕业的老中startup CEO rankingfacebook intern location选择TX的9万年薪,和MD10万年薪选哪个?find a file in linux but got permission denied as admiin