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

Google Phone 9/30

🔗
WhatsFLAG 2016-10-2 06:01:42 | 只看该作者
全局:
所以感觉还是楼主的方法精妙啊,如果不是面试官的提示,感觉好像自己发明了一个算法!感觉楼主的offer已经在路上了,膜拜一下
回复

使用道具 举报

🔗
 楼主| ericlee27 2016-10-2 06:57:52 | 只看该作者
全局:
不好意思 下午出去了 回家找了找昨天的草纸  把代码贴出来分享一下

是根据我那个思路写的,如果不对还请大牛们指出!

  1. public int findMaximumGap(int[] nums){
  2.         // Invalid
  3.         if (nums == null || nums.length == 0) return 0;
  4.         int[] smallestSoFar = new int[nums.length];
  5.         smallestSoFar[0] = nums[0];
  6.         for (int i = 1; i < nums.length; ++i) {
  7.             smallestSoFar[i] = (nums[i] < smallestSoFar[i - 1]) ? nums[i] : smallestSoFar[nums.length - 1];
  8.         }
  9.         int max = 0;
  10.         for (int j = nums.length - 1; j > max; j--){
  11.             while ((j > max) && (nums[j] >= smallestSoFar[j - max - 1])) {
  12.                 ++max;
  13.             }
  14.         }
  15.         return max;
  16.     }
复制代码




补充内容 (2016-10-3 03:59):
SorrY 各位,有一处TYPO 第七行最右边的坐标应该是i 不是nums.length-1,打上来的时候打错了 抱歉
回复

使用道具 举报

🔗
 楼主| ericlee27 2016-10-2 07:02:08 | 只看该作者
全局:
木易wen 发表于 2016-10-2 04:06
lz能上一下代码么?只想到了O(nlgn)解法, 想看一下你怎么做的,谢谢

HI 已经贴上来啦
回复

使用道具 举报

🔗
gaohannk 2016-10-2 11:34:07 | 只看该作者
全局:
Hualiang 发表于 2016-10-2 02:27
第二题不是buy and sell stock吗?

不是啊,这是max(j-i),不是A[j]-A[i]
回复

使用道具 举报

🔗
gaohannk 2016-10-2 12:20:21 | 只看该作者
全局:
lz解法才是对的。
回复

使用道具 举报

🔗
gaohannk 2016-10-2 12:26:06 | 只看该作者
全局:
ericlee27 发表于 2016-10-2 06:57
不好意思 下午出去了 回家找了找昨天的草纸  把代码贴出来分享一下

是根据我那个思路写的,如果不对还请 ...
  1.         public static int maxDistance(int[] A) {
  2.                 if(A.length<2)
  3.                         return 0;
  4.                 int[] smallest = new int[A.length];
  5.                 int min = Integer.MAX_VALUE;
  6.                 for (int i = 0; i < A.length; i++) {
  7.                         min = A[i] > min ? min : A[i];
  8.                         smallest[i] = min;
  9.                 }
  10.                 // left从right左边一位开始逐渐左移
  11.                 int right = A.length - 1, left = right - 1;
  12.                 int max = 0;
  13.                 while (right >= max&&left>=0) {
  14.                         if (A[right] > smallest[left]) {
  15.                                 max = right - left;
  16.                                 left--;
  17.                         } else {
  18.                                 right--;
  19.                         }
  20.                 }
  21.                 return max;
  22.         }
复制代码
一样解法
回复

使用道具 举报

🔗
intaglio 2016-10-2 13:27:02 | 只看该作者
全局:

left--是不是应该放在while那层?因为else里面也需要left--?
回复

使用道具 举报

🔗
gbwta 2016-10-2 14:08:02 | 只看该作者
全局:
ericlee27 发表于 2016-10-2 06:57
不好意思 下午出去了 回家找了找昨天的草纸  把代码贴出来分享一下

是根据我那个思路写的,如果不对还请 ...

lz我怎么感觉你的代码跑{8,8,6,6,6,1,7,2,4}这个test case不太对呀。。
回复

使用道具 举报

🔗
cheeroh 2016-10-2 14:27:49 | 只看该作者
全局:
gbwta 发表于 2016-10-2 14:08
lz我怎么感觉你的代码跑{8,8,6,6,6,1,7,2,4}这个test case不太对呀。。

楼主的第7行应该改成
smallestSoFar[i] = (nums[i] < smallestSoFar[i - 1]) ? nums[i] : smallestSoFar[i - 1];
回复

使用道具 举报

🔗
木易wen 2016-10-2 22:48:30 | 只看该作者
全局:
ericlee27 发表于 2016-10-2 06:57
不好意思 下午出去了 回家找了找昨天的草纸  把代码贴出来分享一下

是根据我那个思路写的,如果不对还请 ...

Nice! 祝lz大神onsite顺利
回复

使用道具 举报

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

本版积分规则

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