当然插入是O1,但是删除则不好操作了。 第二个想法是Hashset,但问题其实也一样,这是一个无序的set,没办法搞random。这里的无序set指的是插入进去之后放到的位置就是hash算出来的位置,显然无法用随机的方式使得每一个元素返回的概率相同。 第三个想法则是List作为基础,再用HashMap来补缺陷。 LIst的操作复杂度: ...
include <iostream> include <stdio.h> int jc(int m){ if(m!=1) return m*jc(m-1);else return 1;} int c(int m,int n){ if(m>=n) return jc(m)/(jc(n)*jc(m-n));} int main(void){ int m,n;scanf("%d%d",&m,&n);printf("%d\n",c(m,n));return 0;} ...
但 TreeMap、TreeSet 比 HashMap、HashSet 的优势在于:TreeMap 中的所有 Entry 总是按 key 根据指定排序规则保持有序状态,TreeSet 中所有元素总是根据指定排序规则保持有序状态。 从1这点来看红黑树是牺牲了严格的高度平衡的优越条件为代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由...