由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道数组deduplicate变种题,求个思路。
相关主题
LC有序数组删重复元素的题怎么最快?一道image processing题
请教leetcode上的count and sayDivide Two Integers
看一道面试题probably XOR problem
问一个关于xor的题一个CS题目,大家帮我看一下吧
C++ question, square root求问CC150书上16.9的“multiple of alignment”是什么意思??
大家看看这几道亚麻面试题怎么做?问一个L的题目
看到一个c的面试题,求教。讨论一道所有人做的都不好的lintcode题目
C++ Q79: What is the size of a pointer? and why?counting quickperm algorithm
相关话题的讨论汇总
话题: count话题: index话题: int话题: appears话题: min
进入JobHunting版参与讨论
1 (共1页)
i**********n
发帖数: 196
1
write a function which takes as input a sorted array A of integers and a
positive integer m, and updates A so that if x appears m times in A, it
appears exactly min(2,m) times in A. The update to A should be in one pass,
and no additional storage may be allocated.
求简洁算法。
j*****8
发帖数: 3635
2
lc原题的小变形,加个condition check就行
public int removeDuplicates(int[] A, int m) {
if(A == null || A.length == 0) return 0;
int index = 1, count = 0;
for(int i = 1; i < A.length; i++) {
if(A[i] == A[index-1]) {
if(m >= 2 && count < 1) {//keep it
A[index] = A[i];
index++;
count++;
}
} else {
if(count > 0) count = 0;
A[index] = A[i];
index++;
}
}
return index;
}
y*******8
发帖数: 112
l*****a
发帖数: 14598
4
可以不要count吧,直接跟i-2比较即可

【在 j*****8 的大作中提到】
: lc原题的小变形,加个condition check就行
: public int removeDuplicates(int[] A, int m) {
: if(A == null || A.length == 0) return 0;
: int index = 1, count = 0;
: for(int i = 1; i < A.length; i++) {
: if(A[i] == A[index-1]) {
: if(m >= 2 && count < 1) {//keep it
: A[index] = A[i];
: index++;
: count++;

j*****8
发帖数: 3635
5
有道理,多谢大牛指点

【在 l*****a 的大作中提到】
: 可以不要count吧,直接跟i-2比较即可
y*******8
发帖数: 112
6
不可以比较i 和 i-1 i-2,会覆盖掉之前的数值,导致后面的比较不准啊。
http://codesays.com/2014/solution-to-remove-duplicates-from-sor

【在 l*****a 的大作中提到】
: 可以不要count吧,直接跟i-2比较即可
l*****a
发帖数: 14598
7
其实不是i了
弄个read/write 2 index
看A[read] and A[write-2]
does that make sense?

【在 y*******8 的大作中提到】
: 不可以比较i 和 i-1 i-2,会覆盖掉之前的数值,导致后面的比较不准啊。
: http://codesays.com/2014/solution-to-remove-duplicates-from-sor

y*******8
发帖数: 112
8
Make sense. 我最开始的答案就是用的相似的方法。
但是jingi08 的解法个人觉得更好,因为更加通用。min(2,m)可以这么做,min(3,m)或
者min(4,m)都可以。只要加一个参数就可以了。然后比较if count <= M:决定写不写。
当然两种代码都可以过。http://codesays.com/2014/solution-to-remove-duplicates-from-sorted-array-ii-by-leetcode/
我还在苦苦找第一份工作,经验肯定不如前辈,可能考虑不周,请多指教!

【在 l*****a 的大作中提到】
: 其实不是i了
: 弄个read/write 2 index
: 看A[read] and A[write-2]
: does that make sense?

l*****a
发帖数: 14598
9
那把A[write-2]换成A[write-k]是不是就可以了呢?
关于算法,有工作经验的不见得比在校生强吧

【在 y*******8 的大作中提到】
: Make sense. 我最开始的答案就是用的相似的方法。
: 但是jingi08 的解法个人觉得更好,因为更加通用。min(2,m)可以这么做,min(3,m)或
: 者min(4,m)都可以。只要加一个参数就可以了。然后比较if count <= M:决定写不写。
: 当然两种代码都可以过。http://codesays.com/2014/solution-to-remove-duplicates-from-sorted-array-ii-by-leetcode/
: 我还在苦苦找第一份工作,经验肯定不如前辈,可能考虑不周,请多指教!

y*******8
发帖数: 112
10
那复杂度就上去了,是O(N*K)了。用个变量存count复杂度始终会是O(N)。
K是容许重复的最大次数。

【在 l*****a 的大作中提到】
: 那把A[write-2]换成A[write-k]是不是就可以了呢?
: 关于算法,有工作经验的不见得比在校生强吧

相关主题
大家看看这几道亚麻面试题怎么做?一道image processing题
看到一个c的面试题,求教。Divide Two Integers
C++ Q79: What is the size of a pointer? and why?probably XOR problem
进入JobHunting版参与讨论
i**********n
发帖数: 196
11
非常elegant的解法!受教了。

【在 j*****8 的大作中提到】
: lc原题的小变形,加个condition check就行
: public int removeDuplicates(int[] A, int m) {
: if(A == null || A.length == 0) return 0;
: int index = 1, count = 0;
: for(int i = 1; i < A.length; i++) {
: if(A[i] == A[index-1]) {
: if(m >= 2 && count < 1) {//keep it
: A[index] = A[i];
: index++;
: count++;

a*******3
发帖数: 13
12
updates A so that if x appears m times in A, it appears exactly min(2,m)
times in A.
这题意思不应该是如果一个数在数组里面正好出现了m次,才把这个数的出现次数调整
为min(2.,m)么?如果这个数出现次数不等于m次不应该全部保留下来么?
还是说我理解有问题。。?
i**********n
发帖数: 196
13
取2和m中的较小者。

【在 a*******3 的大作中提到】
: updates A so that if x appears m times in A, it appears exactly min(2,m)
: times in A.
: 这题意思不应该是如果一个数在数组里面正好出现了m次,才把这个数的出现次数调整
: 为min(2.,m)么?如果这个数出现次数不等于m次不应该全部保留下来么?
: 还是说我理解有问题。。?

l*****a
发帖数: 14598
14
why O(N*K)呢?
每个需要处理K次?没有啊

【在 y*******8 的大作中提到】
: 那复杂度就上去了,是O(N*K)了。用个变量存count复杂度始终会是O(N)。
: K是容许重复的最大次数。

B********t
发帖数: 147
15
class Solution {
public:
int removeDuplicates(int A[], int n) {
if (n <= 2) return n;
int c = 0, l = 0, r = 0;
while (r < n) {
while (r < n && A[l] == A[r]) r++;
l = r - l > 2 ? r - 2 : l;
while (l != r) A[c++] = A[l++];
}
return c;
}
};
t***t
发帖数: 6066
16
新学位能拿新的CPT么?我觉得你直接找工作为好。刷题进flg,visa对他们应该没问题
h*******e
发帖数: 1377
17
这是程序论坛的bug? 我怎么在讨论rmv duplicate II 里看到你的回复了。

【在 t***t 的大作中提到】
: 新学位能拿新的CPT么?我觉得你直接找工作为好。刷题进flg,visa对他们应该没问题
: 。

i**********n
发帖数: 196
18
write a function which takes as input a sorted array A of integers and a
positive integer m, and updates A so that if x appears m times in A, it
appears exactly min(2,m) times in A. The update to A should be in one pass,
and no additional storage may be allocated.
求简洁算法。
j*****8
发帖数: 3635
19
lc原题的小变形,加个condition check就行
public int removeDuplicates(int[] A, int m) {
if(A == null || A.length == 0) return 0;
int index = 1, count = 0;
for(int i = 1; i < A.length; i++) {
if(A[i] == A[index-1]) {
if(m >= 2 && count < 1) {//keep it
A[index] = A[i];
index++;
count++;
}
} else {
if(count > 0) count = 0;
A[index] = A[i];
index++;
}
}
return index;
}
y*******8
发帖数: 112
相关主题
一个CS题目,大家帮我看一下吧讨论一道所有人做的都不好的lintcode题目
求问CC150书上16.9的“multiple of alignment”是什么意思??counting quickperm algorithm
问一个L的题目counting sort an array of objects怎么做
进入JobHunting版参与讨论
l*****a
发帖数: 14598
21
可以不要count吧,直接跟i-2比较即可

【在 j*****8 的大作中提到】
: lc原题的小变形,加个condition check就行
: public int removeDuplicates(int[] A, int m) {
: if(A == null || A.length == 0) return 0;
: int index = 1, count = 0;
: for(int i = 1; i < A.length; i++) {
: if(A[i] == A[index-1]) {
: if(m >= 2 && count < 1) {//keep it
: A[index] = A[i];
: index++;
: count++;

j*****8
发帖数: 3635
22
有道理,多谢大牛指点

【在 l*****a 的大作中提到】
: 可以不要count吧,直接跟i-2比较即可
y*******8
发帖数: 112
23
不可以比较i 和 i-1 i-2,会覆盖掉之前的数值,导致后面的比较不准啊。
http://codesays.com/2014/solution-to-remove-duplicates-from-sor

【在 l*****a 的大作中提到】
: 可以不要count吧,直接跟i-2比较即可
l*****a
发帖数: 14598
24
其实不是i了
弄个read/write 2 index
看A[read] and A[write-2]
does that make sense?

【在 y*******8 的大作中提到】
: 不可以比较i 和 i-1 i-2,会覆盖掉之前的数值,导致后面的比较不准啊。
: http://codesays.com/2014/solution-to-remove-duplicates-from-sor

y*******8
发帖数: 112
25
Make sense. 我最开始的答案就是用的相似的方法。
但是jingi08 的解法个人觉得更好,因为更加通用。min(2,m)可以这么做,min(3,m)或
者min(4,m)都可以。只要加一个参数就可以了。然后比较if count <= M:决定写不写。
当然两种代码都可以过。http://codesays.com/2014/solution-to-remove-duplicates-from-sorted-array-ii-by-leetcode/
我还在苦苦找第一份工作,经验肯定不如前辈,可能考虑不周,请多指教!

【在 l*****a 的大作中提到】
: 其实不是i了
: 弄个read/write 2 index
: 看A[read] and A[write-2]
: does that make sense?

l*****a
发帖数: 14598
26
那把A[write-2]换成A[write-k]是不是就可以了呢?
关于算法,有工作经验的不见得比在校生强吧

【在 y*******8 的大作中提到】
: Make sense. 我最开始的答案就是用的相似的方法。
: 但是jingi08 的解法个人觉得更好,因为更加通用。min(2,m)可以这么做,min(3,m)或
: 者min(4,m)都可以。只要加一个参数就可以了。然后比较if count <= M:决定写不写。
: 当然两种代码都可以过。http://codesays.com/2014/solution-to-remove-duplicates-from-sorted-array-ii-by-leetcode/
: 我还在苦苦找第一份工作,经验肯定不如前辈,可能考虑不周,请多指教!

y*******8
发帖数: 112
27
那复杂度就上去了,是O(N*K)了。用个变量存count复杂度始终会是O(N)。
K是容许重复的最大次数。

【在 l*****a 的大作中提到】
: 那把A[write-2]换成A[write-k]是不是就可以了呢?
: 关于算法,有工作经验的不见得比在校生强吧

i**********n
发帖数: 196
28
非常elegant的解法!受教了。

【在 j*****8 的大作中提到】
: lc原题的小变形,加个condition check就行
: public int removeDuplicates(int[] A, int m) {
: if(A == null || A.length == 0) return 0;
: int index = 1, count = 0;
: for(int i = 1; i < A.length; i++) {
: if(A[i] == A[index-1]) {
: if(m >= 2 && count < 1) {//keep it
: A[index] = A[i];
: index++;
: count++;

a*******3
发帖数: 13
29
updates A so that if x appears m times in A, it appears exactly min(2,m)
times in A.
这题意思不应该是如果一个数在数组里面正好出现了m次,才把这个数的出现次数调整
为min(2.,m)么?如果这个数出现次数不等于m次不应该全部保留下来么?
还是说我理解有问题。。?
i**********n
发帖数: 196
30
取2和m中的较小者。

【在 a*******3 的大作中提到】
: updates A so that if x appears m times in A, it appears exactly min(2,m)
: times in A.
: 这题意思不应该是如果一个数在数组里面正好出现了m次,才把这个数的出现次数调整
: 为min(2.,m)么?如果这个数出现次数不等于m次不应该全部保留下来么?
: 还是说我理解有问题。。?

相关主题
[合集] M$ 面试问题请教leetcode上的count and say
One question on Careercup看一道面试题
LC有序数组删重复元素的题怎么最快?问一个关于xor的题
进入JobHunting版参与讨论
l*****a
发帖数: 14598
31
why O(N*K)呢?
每个需要处理K次?没有啊

【在 y*******8 的大作中提到】
: 那复杂度就上去了,是O(N*K)了。用个变量存count复杂度始终会是O(N)。
: K是容许重复的最大次数。

t***t
发帖数: 6066
32
新学位能拿新的CPT么?我觉得你直接找工作为好。刷题进flg,visa对他们应该没问题
h*******e
发帖数: 1377
33
这是程序论坛的bug? 我怎么在讨论rmv duplicate II 里看到你的回复了。

【在 t***t 的大作中提到】
: 新学位能拿新的CPT么?我觉得你直接找工作为好。刷题进flg,visa对他们应该没问题
: 。

f**********t
发帖数: 1001
34
// write a function which takes as input a sorted array A of integers and a
positive integer m, and updates A so that if x appears m times in A, it
appears exactly min(2,m) times in A. The update to A should be in one pass,
and no additional storage may be allocated.
void deduplicate(vector &A, unsigned m) {
if (A.size() < 3 || m < 3) {
return;
}
unsigned count = 1;
int pre = A[0];
unsigned left = 0;
unsigned copyIdx = 0;
for (unsigned right = 1; right < A.size(); ++right) {
if (A[right] == pre) {
++count;
} else {
unsigned bar = right;
if (count == m) {
bar = left + 2;
}
while (left < bar) {
A[copyIdx++] = A[left++];
}
left = right;
pre = A[right];
count = 1;
}
}
unsigned bar = A.size();
if (count == m) {
bar = left + 2;
}
while (left < bar) {
A[copyIdx++] = A[left++];
}
A.erase(A.begin() + copyIdx, A.end());
}
f**********t
发帖数: 1001
35
Will, if the dup is m - 1, or m + 1 ....., it need to be all copied, based
on what 楼主 said.

【在 j*****8 的大作中提到】
: lc原题的小变形,加个condition check就行
: public int removeDuplicates(int[] A, int m) {
: if(A == null || A.length == 0) return 0;
: int index = 1, count = 0;
: for(int i = 1; i < A.length; i++) {
: if(A[i] == A[index-1]) {
: if(m >= 2 && count < 1) {//keep it
: A[index] = A[i];
: index++;
: count++;

1 (共1页)
进入JobHunting版参与讨论
相关主题
counting quickperm algorithmC++ question, square root
counting sort an array of objects怎么做大家看看这几道亚麻面试题怎么做?
[合集] M$ 面试问题看到一个c的面试题,求教。
One question on CareercupC++ Q79: What is the size of a pointer? and why?
LC有序数组删重复元素的题怎么最快?一道image processing题
请教leetcode上的count and sayDivide Two Integers
看一道面试题probably XOR problem
问一个关于xor的题一个CS题目,大家帮我看一下吧
相关话题的讨论汇总
话题: count话题: index话题: int话题: appears话题: min