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

[高频题] 324 的 in place 和O(n)解法

全局:

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

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

x
本帖最后由 techDiscussion 于 2020-12-19 22:42 编辑

我已经阵亡了。

我的解法是 nlgn :

  1. class Solution {

  2.      public void wiggleSort(int[] nums) {

  3.             Arrays.sort(nums);

  4.             int n = nums.length;
  5.          
  6.             int mid = (n-1)/2;
  7.             int k = 0;
  8.             int[] temp = new int[n];

  9.             for  (int i=0; i<=mid; i++) {

  10.                                     temp[k] = nums[mid - i];        

  11.                 if (k + 1 < n  )    temp[k + 1] = nums[n - 1 - i];  
  12.    

  13.                 k += 2;
  14.             }
  15.          
  16.             System.arraycopy(temp, 0 ,nums, 0, n);
  17.         }   
  18. }
复制代码



题目的follow up是 in-place   而且 O(n)   --->  世界上真的有这个解法吗?  


欢迎分享!!!


补充内容 (2020-12-22 02:03):



谁能帮我找一下quick select的解法代码?  感谢万分!!!

上一篇:刷题效率低,每题都感觉在做脑经急转弯
下一篇:一起上Udemy的React课程(严格无情打卡)[Seattle]
推荐
raistlins 2020-12-22 02:29:36 | 只看该作者
全局:
本帖最后由 raistlins 于 2020-12-22 03:15 编辑

就是 寻找K-th largest的 O(n)解法,只不过这里k = n/2。
算法原理也很简单,就是quick sort,只不过当你的pivot坐标等于K的时候,就中止迭代。因此pivot左边和右边都可能是未排序的,但一定满足左边的都小于等于pivot,右边都大于等于pivot.
这种算法平均来看就是O(n).如果完成所有迭代,则是O(nlogn)


完成quick partition,后面还有一个步骤是前后两部分穿插放置。这个要in-place还挺繁琐。
回复

使用道具 举报

🔗
只是Leon 2020-12-20 02:36:27 | 只看该作者
全局:
这个题目太难了吧。。。 楼主的解法已经又快又好了,我在leetcode run了一下faster than 90%

我用python试了一下in place,发现指针处理起来太复杂了。

p.s 我也不知道这个信息会打击还是安慰楼主,我leetcode看了一下,最近六个月只显示PayPal,而且频率很低,一年前Flag有考但是频率也都不高。楼主下次好运🍀
回复

使用道具 举报

🔗
cynthiameowmeow 2020-12-21 15:06:39 | 只看该作者
全局:
你把sorting改成 partition成前后两半 不就是O(n)了?
没学过算法的话请去看算法导论的quick sort部分

评分

参与人数 1大米 +1 收起 理由
iwanttobe22 + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
g00gley 2020-12-21 18:33:00 | 只看该作者
全局:
in place O(N)的话估计就是楼上说的做法,把sort变成只把数组分成<mid和>mid的部分,应该就是平均复杂度O(N)了,lz可以去leetcode和Wikipedia上找这个算法,关键字是quickselect

评分

参与人数 1大米 +1 收起 理由
iwanttobe22 + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

全局:
BFPRT quickselect 吗
看看程序员面试指南里面讲过
回复

使用道具 举报

🔗
yeetatbig4 2020-12-22 01:25:49 | 只看该作者
全局:
quick select 是重要考点,楼上们都提了,LZ 去好好补下课。所以世界上还真有。。。不过别怕哈,多举一反三就习惯这种follow up了
回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-22 02:04:28 | 只看该作者
全局:
g00gley 发表于 2020-12-21 18:33
in place O(N)的话估计就是楼上说的做法,把sort变成只把数组分成mid的部分,应该就是平均复杂度O(N)了,lz ...

跪求这一题的解法感谢万分!!!!
回复

使用道具 举报

🔗
raistlins 2020-12-22 03:13:42 | 只看该作者
全局:
raistlins 发表于 2020-12-22 02:29
就是 寻找K-th largest的 O(n)解法,只不过这里k = n/2。
算法原理也很简单,就是quick sort,只不过当你 ...

完成quick partition,后面还有一个步骤是前后两部分穿插放置
回复

使用道具 举报

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

本版积分规则

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