一道算法题(负数左边,正数右边)的最优答案
2011-09-19 09:10
113 查看
int[] source = { 5, -3, 6, -7, -6, 1, 8, -4, 0, 0 }; int toRightIdx = 0; int toLeftIdx = source.Length - 1; int leftIdx = 0; int rightIdx = source.Length - 1; int[] result = new int[source.Length]; while (true) { if (toLeftIdx >= 0) { int left = source[toRightIdx++]; if (left < 0) result[leftIdx++] = left; int right = source[toLeftIdx--]; if (right > 0) result[rightIdx--] = right; } else { result[rightIdx--] = 0; } if (leftIdx > rightIdx) break; }
应该算是最好的解法了吧:P
相关文章推荐
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- 正数放右边,负数放左边 —— java
- 某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变
- 【大家来一起讨论吧】百度面试题,假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求:o(n),o(1)
- 把数组中负数放在左边零在中间正数放右边
- 【每天一道算法题】给定一个存放整数的数组,要求数组左边为奇数,右边为偶数
- 将所给数组中的负数安排在左边,零安排在中间,正数安排在右边
- 不改变相对顺序,负数左边正数右边
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 挑战篇二.2:内存池分配问题(最优适应算法)——答案错误
- 编写一个算法将顺序表A分成两部分,大于0 的在A的左边,小于0的在A的右边
- 对于一个字符串,设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特点位置p,请返回旋转后的结果。
- 每天一道算法题(12)——和为n的连续正数序列或者随机数
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 排序使得数组负数在正数左边且按照原来的顺序
- 每天一道算法题(12)——和为n的连续正数序列或者随机数
- 每天一道算法题(31)——正数减法
- 算法:将数组中的整数进行排列,奇数在左边,偶数在右边
- 每天一道算法题(31)——正数减法
- 一道算法面试题 -- 输出所有和为n连续正数序列