EB1B,7封推荐信(5独立),3个中国人,会有问题吗?# Immigration - 落地生根T*82011-09-21 07:091 楼不知道有没有O(n)的算法。。。Count smaller elements on right sideeg : [4,12,5,6,1,34,3,2]o/p [3,5,3,3,0,2,1,0]
r*b2011-09-21 07:093 楼As far as I know, we can have an O(nlogn) algo for this.http://basicalgos.blogspot.com/2012/03/20-count-smaller-elementNot sure about O(n). I don't think that we can finally reach O(n).【在 T*****8 的大作中提到】: 不知道有没有O(n)的算法。。。: Count smaller elements on right side: eg : [4,12,5,6,1,34,3,2]: o/p [3,5,3,3,0,2,1,0]
l*i2011-09-21 07:095 楼divide and conquer, count each half and also sort them, then you can do O(nlogn). I agree that O(n) seems unlikely.
P*U2011-09-21 07:099 楼binary search 的时候怎么做到只考虑右边的比它小的?【在 q******8 的大作中提到】: nlogn吧,sort,然后binary search找。
c*g2011-09-21 07:0911 楼应该是,BINARY SEARCH之后,就可以找到INDEX,这个INDEX就是小于它的个数吧er) 的大作中提到: 】【在 P*******U 的大作中提到】: binary search 的时候怎么做到只考虑右边的比它小的?
P*U2011-09-21 07:0912 楼是啊,但是题目要求Count smaller elements on right side,不是general的smallerelements啊【在 c***g 的大作中提到】: 应该是,BINARY SEARCH之后,就可以找到INDEX,这个INDEX就是小于它的个数吧: : er) 的大作中提到: 】
s*n2011-09-21 07:0913 楼维护一个bst,每个节点存子树的节点总数。来一个数字后插入,旋转等,需要修改节点数。。那么比这个数字小的节点总数为:插入节点的左儿子节点数,加上所有祖先节点的左儿子节点数,向上查找祖先节点的终止条件是当前节点已经是父亲节点的左儿子。
e*l2011-09-21 07:0914 楼从答案[3,5,3,3,0,2,1,0]推不出来排序的结果,所以先sort的话做了多余的操作。从后往前建堆,虽然是n次lgn的binary search,但是这个级数能收敛到O(n)。你看书上建堆的分析。这样应该是对的。
s*n2011-09-21 07:0915 楼把一个数字插入堆中,如何知道堆中比这个数字小的集合总数?堆的特性是某一节点的后代都比它小,但不代表所有比它小的都是它后代。【在 e***l 的大作中提到】: 从后往前建堆. 记录新node移动的信息. 整个复杂度应该是build heap的时间,O(n)。: 这样对不对?
e*l2011-09-21 07:0916 楼你说的对。我再想想【在 s******n 的大作中提到】: 把一个数字插入堆中,如何知道堆中比这个数字小的集合总数?堆的特性是某一节点的: 后代都比它小,但不代表所有比它小的都是它后代。
q*82011-09-21 07:0917 楼int[] smaller_on_right(int[] array){int length = array.length;int[] result = new int[length]; ArrayList arraylist = new ArrayList();for(int i=0; iarraylist.add(array[i]);}Collections.sort(arraylist);//nlgnfor(int j=0; jresult[j] = Collections.binarySearch(arraylist, array[j]);//lgnarraylist.remove(result[j]);//这步如果是array的话,算法就不是nlogn了,不过如果是linkedlist的话,可以在每个node里存个index,remove就是o(1)了}return result;}
w*o2011-09-21 07:0918 楼数组里可以有重复的数吗?如果a[] = { 5 5 5 5 5}, 结果是[ 0 0 0 0 0]吗?【在 T*****8 的大作中提到】: 不知道有没有O(n)的算法。。。: Count smaller elements on right side: eg : [4,12,5,6,1,34,3,2]: o/p [3,5,3,3,0,2,1,0]
T*82011-09-21 07:0919 楼不知道有没有O(n)的算法。。。Count smaller elements on right sideeg : [4,12,5,6,1,34,3,2]o/p [3,5,3,3,0,2,1,0]
r*b2011-09-21 07:0920 楼As far as I know, we can have an O(nlogn) algo for this.http://basicalgos.blogspot.com/2012/03/20-count-smaller-elementNot sure about O(n). I don't think that we can finally reach O(n).【在 T*****8 的大作中提到】: 不知道有没有O(n)的算法。。。: Count smaller elements on right side: eg : [4,12,5,6,1,34,3,2]: o/p [3,5,3,3,0,2,1,0]
l*i2011-09-21 07:0921 楼divide and conquer, count each half and also sort them, then you can do O(nlogn). I agree that O(n) seems unlikely.
P*U2011-09-21 07:0925 楼binary search 的时候怎么做到只考虑右边的比它小的?【在 q******8 的大作中提到】: nlogn吧,sort,然后binary search找。
c*g2011-09-21 07:0927 楼应该是,BINARY SEARCH之后,就可以找到INDEX,这个INDEX就是小于它的个数吧er) 的大作中提到: 】【在 P*******U 的大作中提到】: binary search 的时候怎么做到只考虑右边的比它小的?
P*U2011-09-21 07:0928 楼是啊,但是题目要求Count smaller elements on right side,不是general的smallerelements啊【在 c***g 的大作中提到】: 应该是,BINARY SEARCH之后,就可以找到INDEX,这个INDEX就是小于它的个数吧: : er) 的大作中提到: 】
s*n2011-09-21 07:0929 楼维护一个bst,每个节点存子树的节点总数。来一个数字后插入,旋转等,需要修改节点数。。那么比这个数字小的节点总数为:插入节点的左儿子节点数,加上所有祖先节点的左儿子节点数,向上查找祖先节点的终止条件是当前节点已经是父亲节点的左儿子。
e*l2011-09-21 07:0930 楼从答案[3,5,3,3,0,2,1,0]推不出来排序的结果,所以先sort的话做了多余的操作。从后往前建堆,虽然是n次lgn的binary search,但是这个级数能收敛到O(n)。你看书上建堆的分析。这样应该是对的。
s*n2011-09-21 07:0931 楼把一个数字插入堆中,如何知道堆中比这个数字小的集合总数?堆的特性是某一节点的后代都比它小,但不代表所有比它小的都是它后代。【在 e***l 的大作中提到】: 从后往前建堆. 记录新node移动的信息. 整个复杂度应该是build heap的时间,O(n)。: 这样对不对?
e*l2011-09-21 07:0932 楼你说的对。我再想想【在 s******n 的大作中提到】: 把一个数字插入堆中,如何知道堆中比这个数字小的集合总数?堆的特性是某一节点的: 后代都比它小,但不代表所有比它小的都是它后代。
q*82011-09-21 07:0933 楼int[] smaller_on_right(int[] array){int length = array.length;int[] result = new int[length]; ArrayList arraylist = new ArrayList();for(int i=0; iarraylist.add(array[i]);}Collections.sort(arraylist);//nlgnfor(int j=0; jresult[j] = Collections.binarySearch(arraylist, array[j]);//lgnarraylist.remove(result[j]);//这步如果是array的话,算法就不是nlogn了,不过如果是linkedlist的话,可以在每个node里存个index,remove就是o(1)了}return result;}
w*o2011-09-21 07:0934 楼数组里可以有重复的数吗?如果a[] = { 5 5 5 5 5}, 结果是[ 0 0 0 0 0]吗?【在 T*****8 的大作中提到】: 不知道有没有O(n)的算法。。。: Count smaller elements on right side: eg : [4,12,5,6,1,34,3,2]: o/p [3,5,3,3,0,2,1,0]
h*e2011-09-21 07:0935 楼[5 4 3]5 has 4 and 3 less than it, so 2 numbers to 5's right less than 54 has 3 less than it, so the result is[2 1 0]【在 w***y 的大作中提到】: 55555 我怎么没看懂这个题目什么意思