算法面试
rj042
软件行业
展开
-
如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
题目描述: 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) 解析: 利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,然后遍历n个数,假设这n个数在数组array[0...n-1]中,则i取值从0到n-1同时执行a[array[i]]++,最后再依照顺序读数组a,遇到不为0时,将对应的下标读回数组array,计数是几转载 2014-03-13 00:18:59 · 5430 阅读 · 1 评论 -
合并两个已经排序的数组为另一个数组
要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间. void MergeArray(int *pArray1, int nLen1, int *pArray2, int nLen2, int *pArray) { int i, j, n; i = j = n = 0; while (i // 循环一直进行到拷贝完某一原创 2014-03-13 23:56:34 · 1935 阅读 · 0 评论 -
在给定的数组中找出两个元素和为给定值的所有元素对
使用hash map: 1假设V为给定的值,A为给定的数组。 2创建hash map M,M将从数组元素映射到出现次数。 3对数组中的元素A[i]: 如果 V-A[i] 在M中,打印A[I] 和V-A[I], M[V-A[i]] 次. 如果A[i]在M中,增加M[A[i]],否则M[A[i]] = 1.原创 2014-03-13 23:34:49 · 1116 阅读 · 0 评论