楼主: smzfeng
跳转到指定楼层
上一主题 下一主题
收起左侧

微软intern面经,求答案

🔗
wwwyhx 2012-3-14 12:00:15 | 只看该作者
全局:
以前写的太乱了, 更新一个

  1. void swapRange(int a[], int nLft, int nRgt)
  2. {
  3.         assert(a);
  4.         while (nLft < nRgt)
  5.                 swap(a[nLft++], a[nRgt--]);
  6. }

  7. void ReArrange(int a[], int n)
  8. {
  9.         assert(a);

  10.         if (n <= 1) return;

  11.         ReArrange(a, n/2);
  12.         ReArrange(a + n/2, n - n/2);

  13.         int nLft = 0;
  14.         int nRgt = n-1;
  15.         while (a[nLft] < 0) nLft++;
  16.         while (a[nRgt] >= 0) nRgt--;

  17.         if (nLft > nRgt) return;

  18.         swapRange(a, nLft, nRgt);

  19.         int nMid = nLft;
  20.         while (nMid < n && a[nMid] < 0) nMid++;
  21.         swapRange(a, nLft, nMid-1);
  22.         swapRange(a, nMid, nRgt);
  23. }
复制代码
回复

使用道具 举报

🔗
3vilCoder 2012-3-14 12:01:19 | 只看该作者
全局:
回复

使用道具 举报

🔗
wwwyhx 2012-3-14 12:03:08 | 只看该作者
全局:
程序写起来逻辑不想清楚也会卡住
if (nLft > nRgt) return; 这段逻辑要是不退出放在后面一起处理麻烦死了会....
回复

使用道具 举报

🔗
jintian1_84 2012-3-14 14:02:54 | 只看该作者
全局:
回复 32# tsy3602

谢谢
回复

使用道具 举报

🔗
jintian1_84 2012-3-14 14:04:38 | 只看该作者
全局:
回复 31# wwwyhx

这个看起来简洁很多,好好学习学习
回复

使用道具 举报

🔗
0864 2012-3-14 21:03:33 | 只看该作者
全局:
Mark!
“一般递归log(n)的栈空间不算进去”
回复

使用道具 举报

🔗
xxxffz 2012-3-15 00:29:46 | 只看该作者
全局:
不知道 STL 的 stable_partition 时空是多少
回复

使用道具 举报

🔗
bingjie 2012-3-15 04:08:43 | 只看该作者
全局:
会是乱序吗?
用两个指针,依次向前遍历,第一个指针专门找正数,每次遇到正数就停止,第二个指针专门找负数,当他们找到的时候,依次交换两个指针指向的内容,然后继续向前找,不就可以了吗?这样的复杂度是n,空间是1.
回复

使用道具 举报

🔗
 楼主| smzfeng 2012-3-15 04:24:17 | 只看该作者
全局:
回复 38# bingjie

会 如 -1 3 -2 1 -5 =>3 1 -2 -1 -5
回复

使用道具 举报

🔗
gboystal 2012-3-16 23:51:25 | 只看该作者
全局:
不就是快排的其中一个步骤么
回复

使用道具 举报

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

本版积分规则

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