由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Re: 贡献个facebook电话interview
相关主题
bloomberg刚店面晚。 悔阿哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort
其实我很想知道, 多少软工能45分钟内把quicksort写下来heap sort的缺点是什么?和quick sort比
~~~~~~~~问个G家的题~~~~~~~~~~~问一道算法题,find min in the last k elements
吐槽QuickSort的partition一个C++问题
Quick Sort的partition问题Find the first k smallest numbers in an array.
leetcode: Remove Duplicates from Sorted ArrayThe time complexity on finding the kth largest element in a
这个rotated sorted array问题两道2009算法题
问一道题, 不是很难, 但不知道最优解是什么[Algo]dutch flag problem
相关话题的讨论汇总
话题: arr话题: start话题: end话题: int话题: array
进入JobHunting版参与讨论
1 (共1页)
h*****g
发帖数: 312
1
2)/*
* Given an array and a value, remove all instances of that
* value in place and return the new length. The order of
* elements can be changed. It doesn't matter what you leave
* beyond the new length.
*/
size_t remove_elem(T* array, size_t len, T elem) {
}
这个题目他是想让用quick sort 类似的方法 从两头同时开始找,然后换,尽量减少交
换的次数
////////////////////////////////////////////////
这题从前到后sweep一遍就OK了吧? quick sort得咋做?
e***l
发帖数: 710
2
前后2个指针,前面往后走,每次遇到given value,把后面指针的元素填过来,然后后
面的往前一步。直到相遇。
p*****2
发帖数: 21240
3
static int Remove(int[] arr, int v)
{
int start=0;
int end=arr.length-1;

while(start {
while(arr[start]!=v)
start++;

while(arr[end]==v)
end--;

if(start {
arr[start]=arr[end];
arr[end]=v;
start++;
end--;
}
}

return start;
}
p*****2
发帖数: 21240
4
QuickSort
static void QuickSort(int[] arr, int start, int end)
{
int pivot=arr[(start+end)/2];
int l=start;
int r=end;
while(l {
while(arr[l] l++;

while(arr[r]>pivot)
r--;

if(l<=r)
{
int tmp=arr[l];
arr[l]=arr[r];
arr[r]=tmp;
l++;
r--;
}
}

if(start QuickSort(arr,start,l-1);

if(end>l)
QuickSort(arr,l,end);

}
H***e
发帖数: 476
5
这跟quicksort有啥关系?
从前往后一遍就行了吧,两个指针,一个指向有用的数据最后一个,一个current,如果
current不是target,就把此数据考向前面的指针

【在 h*****g 的大作中提到】
: 2)/*
: * Given an array and a value, remove all instances of that
: * value in place and return the new length. The order of
: * elements can be changed. It doesn't matter what you leave
: * beyond the new length.
: */
: size_t remove_elem(T* array, size_t len, T elem) {
: }
: 这个题目他是想让用quick sort 类似的方法 从两头同时开始找,然后换,尽量减少交
: 换的次数

H***e
发帖数: 476
6
你现在每题都当场练啊
写这个程序加调要多久?

【在 p*****2 的大作中提到】
: QuickSort
: static void QuickSort(int[] arr, int start, int end)
: {
: int pivot=arr[(start+end)/2];
: int l=start;
: int r=end;
: while(l: {
: while(arr[l]: l++;

p*****2
发帖数: 21240
7

没算时间。大概20分钟吧。不过我以前练过这个程序。前两天突然发现忘记了,所以又
看了看算法,今天正好有机会练习一下。就按照前两天的记忆写的。

【在 H***e 的大作中提到】
: 你现在每题都当场练啊
: 写这个程序加调要多久?

a*****n
发帖数: 158
8
这个应该和 DUTCH Flag那个问题比较象吧。。。。
n******d
发帖数: 386
9


【在 h*****g 的大作中提到】
: 2)/*
: * Given an array and a value, remove all instances of that
: * value in place and return the new length. The order of
: * elements can be changed. It doesn't matter what you leave
: * beyond the new length.
: */
: size_t remove_elem(T* array, size_t len, T elem) {
: }
: 这个题目他是想让用quick sort 类似的方法 从两头同时开始找,然后换,尽量减少交
: 换的次数

s****e
发帖数: 638
10
有bug. 这个arr可能不含 v.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【在 p*****2 的大作中提到】
:
: 没算时间。大概20分钟吧。不过我以前练过这个程序。前两天突然发现忘记了,所以又
: 看了看算法,今天正好有机会练习一下。就按照前两天的记忆写的。

相关主题
leetcode: Remove Duplicates from Sorted Array哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort
这个rotated sorted array问题heap sort的缺点是什么?和quick sort比
问一道题, 不是很难, 但不知道最优解是什么问一道算法题,find min in the last k elements
进入JobHunting版参与讨论
p*****2
发帖数: 21240
11

是。

【在 s****e 的大作中提到】
: 有bug. 这个arr可能不含 v.
:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

h********w
发帖数: 221
12
good, mark 一下!
P***P
发帖数: 1387
13
qsort最好上点median of 3, 还要注意array有重复的情况

【在 p*****2 的大作中提到】
: QuickSort
: static void QuickSort(int[] arr, int start, int end)
: {
: int pivot=arr[(start+end)/2];
: int l=start;
: int r=end;
: while(l: {
: while(arr[l]: l++;

z******t
发帖数: 59
14
在博客中分析了这个问题:
http://codercareer.blogspot.com/2012/02/no-32-remove-numbers-in
博客中的思路和peking2的思路是一样的。博客中的代码删除了两行不必要的代码(If
中的++和--不是必须的,因为在while循环里这两个操作都要做)。

【在 p*****2 的大作中提到】
:
: 是。

j**w
发帖数: 382
15
void swap(T *array, size_t i, size_t j)
{
if (i != j)
{
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
size_t remove_elem(T* array, size_t len, T elem)
{
size_t i = 0;
size_t j = len-1;
while (( i < len ) && ( i < j ))
{
if (array[i].equals(elem))
{
swap(array, i, j);
j--;
}
else
{
i++;
}
}
return j+1;
}
j********x
发帖数: 2330
16
remove erase idiom
把符合条件的先放到末尾,完成之后抹掉
或者前后两个指针,一个维护应该保留的元素,一个维护当前插入的位置
覆盖不需要保留的元素即可

【在 h*****g 的大作中提到】
: 2)/*
: * Given an array and a value, remove all instances of that
: * value in place and return the new length. The order of
: * elements can be changed. It doesn't matter what you leave
: * beyond the new length.
: */
: size_t remove_elem(T* array, size_t len, T elem) {
: }
: 这个题目他是想让用quick sort 类似的方法 从两头同时开始找,然后换,尽量减少交
: 换的次数

H*****1
发帖数: 4815
17
不用sort啊
就是一个指针在前,一个指针在后
前面指针遇到elem,就跟后一个指针换,后一个指针前移一位
前面指针如果不是elem,就后移一位,直到前面指针和后面指针相等
length就是后面指针-array

【在 h*****g 的大作中提到】
: 2)/*
: * Given an array and a value, remove all instances of that
: * value in place and return the new length. The order of
: * elements can be changed. It doesn't matter what you leave
: * beyond the new length.
: */
: size_t remove_elem(T* array, size_t len, T elem) {
: }
: 这个题目他是想让用quick sort 类似的方法 从两头同时开始找,然后换,尽量减少交
: 换的次数

e****e
发帖数: 418
18
I think "If 中的++和--不是必须的" is a little bit inefficient.
Because it's 100% sure that after if clause, arr[start] != v and arr[end]==v
is true. We can just increase both start and end variable by 1 inside if
clause. Why wait till enter the next round of the outer while loop and let
two inner while loops do the increasing by 1 work?

If

【在 z******t 的大作中提到】
: 在博客中分析了这个问题:
: http://codercareer.blogspot.com/2012/02/no-32-remove-numbers-in
: 博客中的思路和peking2的思路是一样的。博客中的代码删除了两行不必要的代码(If
: 中的++和--不是必须的,因为在while循环里这两个操作都要做)。

e****e
发帖数: 418
19
replace start
【在 s****e 的大作中提到】
: 有bug. 这个arr可能不含 v.
:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

i**********e
发帖数: 1145
20
这里首先有个判定条件错了,应该是 ( i <= j ) 而不是 ( i < j )。
反例:【4,5】,remove 5.
还有一点就是做了很多不必要的交换,例如:
【1,2,2,2,2】,remove 2.这里用了不必要的三次交换。
i**********e
发帖数: 1145
21
试试:
数组【1】,remove 2.

If

【在 z******t 的大作中提到】
: 在博客中分析了这个问题:
: http://codercareer.blogspot.com/2012/02/no-32-remove-numbers-in
: 博客中的思路和peking2的思路是一样的。博客中的代码删除了两行不必要的代码(If
: 中的++和--不是必须的,因为在while循环里这两个操作都要做)。

H***e
发帖数: 476
22
有bug啊
ps, while inside while 极容易出错啊。
我现在都是把里面的 while 用continue delegate给外面的

【在 p*****2 的大作中提到】
:
: 是。

1 (共1页)
进入JobHunting版参与讨论
相关主题
[Algo]dutch flag problemQuick Sort的partition问题
c/c++ qsort/sort 来 sort array of stringleetcode: Remove Duplicates from Sorted Array
贡献个facebook电话interview这个rotated sorted array问题
Suffix Array nlogn的构造是怎么样的?问一道题, 不是很难, 但不知道最优解是什么
bloomberg刚店面晚。 悔阿哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort
其实我很想知道, 多少软工能45分钟内把quicksort写下来heap sort的缺点是什么?和quick sort比
~~~~~~~~问个G家的题~~~~~~~~~~~问一道算法题,find min in the last k elements
吐槽QuickSort的partition一个C++问题
相关话题的讨论汇总
话题: arr话题: start话题: end话题: int话题: array