查看: 3215| 回复: 13
跳转到指定楼层
上一主题 下一主题
收起左侧

Microsoft : Rearrange an array of positive and negative integers,

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Given an array of positive and negative integers, re-arrange it
so that you have postives on one end and negatives on the other,
BUT retain the original order of appearance.
For eg. 1, 7, -5, 9, -12, 15 => -5, -12, 1, 7, 9, 15

上一篇:Microsoft : 一个栈实现队列
下一篇:Amazon : Find a[i] == i
🔗
BillyFan 2011-6-9 21:47:21 | 只看该作者
全局:

  1. 循环原数组,将负数放入“负数数组”,将正数放入“正数数组”
  2. 然后返回 “负数数组” + “正数数组”
  3. <?php
  4. function arr_special_sort($arrInput){
  5.         $arrNeg = array();
  6.         $arrPos = array();
  7.         for($i = 0; $i < count($arrInput); $i++){
  8.                 ($arrInput[$i] < 0) ? array_push($arrNeg,$arrInput[$i]) : array_push($arrPos,$arrInput[$i]) ;
  9.         }
  10.         return array_merge($arrNeg, $arrPos);
  11. }
  12. ?>
复制代码
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-6-11 11:55:07 | 只看该作者
全局:
这题的要求因该是”in place rearrange“,
用merge sort 的逻辑可以做到。负数放左,正数方右
回复

使用道具 举报

🔗
lambda2fei 2012-9-4 17:21:04 | 只看该作者
全局:
wwwyhx 发表于 2011-6-11 11:55
这题的要求因该是”in place rearrange“,
用merge sort 的逻辑可以做到。负数放左,正数方右

正解应该是用0作为pivot应用一次快排的partition过程
回复

使用道具 举报

🔗
ryancooper 2012-9-4 18:19:51 | 只看该作者
全局:
lz你在题目里忘写了in place的要求。如果是in place,那么就用向lz说的用mergesort的逻辑来写;如果不是in place,那么一个O(n)的算法就可以搞定了
回复

使用道具 举报

🔗
BinaryWitch 2012-9-4 21:03:13 | 只看该作者
全局:
回复

使用道具 举报

🔗
CStick75 2012-9-6 17:15:07 | 只看该作者
全局:
void partition(int* arr,int N)
{
     int l,r;
     for(l = r = 0 ; r < N ; r ++) if(arr[r]<0) swap(arr[l++],arr[r]);
}
回复

使用道具 举报

🔗
BinaryWitch 2012-9-10 13:09:49 | 只看该作者
全局:
lambda2fei 发表于 2012-9-4 17:21
正解应该是用0作为pivot应用一次快排的partition过程

如果是说 7 楼那样的做法没有注意楼主强调的 BUT... 哦
回复

使用道具 举报

🔗
BinaryWitch 2012-9-10 13:12:54 | 只看该作者
全局:
CStick75 发表于 2012-9-6 17:15
void partition(int* arr,int N)
{
     int l,r;

比如 {3, -1, 4, -2} 这样会改变 3 和 4 在原数组出现次序
回复

使用道具 举报

🔗
lambda2fei 2012-9-10 13:19:16 | 只看该作者
全局:
BinaryWitch 发表于 2012-9-10 13:09
如果是说 7 楼那样的做法没有注意楼主强调的 BUT... 哦

汗。。。还有个BUT没看到。。。。那不能快排了。。用归并吧,stl源码的归并排有个参数是可用buffer的大小,如果buffer是O(n),那复杂度就是O(n),否则若buffer是O(1)则好像是O(nlogn)的。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表