全部博文(471)
分类: C/C++
2012-09-04 12:46:24
给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
2. 不能使用额外存储空间,直接置为0,哪里要用额外的空间
例子如下
输入 0, 3, 0, 2, 1, 0, 0
输出 0, 0, 0, 0, 3, 2, 1
分析此排序非传统意义上的排序,因为它要求排序前后非0元素的相对位置不变,或许叫做整理会更恰当一些。我们可以从后向前遍历整个数组,遇到某个位置i上的元素是非0元素时,如果a[k]为0,则将a[i]赋值给a[k],a[k]赋值为0。实际上i是非0元素的下标,而k是0元素的下标
应该先从最后开始向前找到第一个0,然后再用Arrange做处理。
点击(此处)折叠或打开
给定一个含有n个元素的整型数组a,从中任取m个元素,求所有组合。比如下面的例子
a = 1, 2, 3, 4, 5
m = 3
输出
1 2 3, 1 2 4, 1 2 5, 1 3 4, 1 3 5, 1 4 5
2 3 4, 2 3 5, 2 4 5
3 4 5
典型的排列组合问题,首选回溯法,为了简化问题,我们将a中n个元素值分别设置为1-n
代码