📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
楼主: tinlittle
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 【面试新题】绝妙的二分查找题,一定要练习一下

   
🔗
pandami 2019-5-18 06:23:12 | 只看该作者
全局:
C++ version
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies


补充内容 (2019-5-18 06:24):
输出
3
5
6
7
8
12
13
14
-1
-1
-1
-1
-1
-1
-1
-1

评分

参与人数 3大米 +5 收起 理由
riptide22 + 1 赞一个
买了拿铁 + 1 赞一个
tinlittle + 3 没有废话的代码,谢谢参与

查看全部评分

回复

使用道具 举报

🔗
mint0715 2019-5-18 07:42:37 | 只看该作者
全局:
  1.     def findKthMissing(self, nums, k):
  2.         def helper(nums, left, right, k):
  3.             if left == right: return nums[left] + k
  4.             mid = (left + right) // 2
  5.             if (nums[left] + mid - left + k) < nums[mid + 1]:
  6.                 return helper(nums, left, mid, k)
  7.             else:
  8.                 return helper(nums, mid+1, right, k - (nums[mid+1] - nums[left] - (mid-left)) + 1)
  9.         return helper(nums, 0, len(nums)-1, k)
复制代码

评分

参与人数 2大米 +4 收起 理由
jluo9612 + 1 赞一个
tinlittle + 3 很简练的递归版,赞一个,谢谢参与

查看全部评分

回复

使用道具 举报

🔗
liaohs49 2019-5-18 20:38:26 | 只看该作者
全局:
Java version, 送一个unittest
  1. import static org.junit.Assert.*;

  2. import org.junit.Test;

  3. public class KthMissingNumber {
  4.        
  5.         public int solution(int[] arr, int k) {
  6.                 int left = 0, right = arr.length - 1;
  7.                 while (left + 1 < right) {
  8.                         int mid = left + (right - left) / 2;
  9.                         int missingNum = arr[mid] - arr[left] - (mid - left);
  10.                         if (missingNum >= k) {
  11.                                 right = mid;
  12.                         } else if (missingNum < k) {
  13.                                 k = k - missingNum;
  14.                                 left = mid;
  15.                         }
  16.                 }
  17.                 return arr[left] + k >= arr[right] ? -1 : arr[left] + k;
  18.         }
  19.        
  20.         @Test
  21.         public void test() {
  22.                 KthMissingNumber kmn = new KthMissingNumber();
  23.                 int[] testArr = new int[] {2, 4, 7, 8, 9, 15};
  24.                 int[] expection = new int[] {3, 5, 6, 10, 11, 12, 13, 14, -1, -1};
  25.                 for (int i = 0; i < 10; i++) {
  26.                         assertEquals(kmn.solution(testArr, i + 1), expection[i]);
  27.                 }
  28.         }

  29. }
复制代码


补充内容 (2019-5-20 17:48):
有点typo 大家无视

评分

参与人数 3大米 +6 收起 理由
Acker + 1 赞一个
qqqzhouhk + 2 很有用的信息!
tinlittle + 3 谢谢参与

查看全部评分

回复

使用道具 举报

🔗
Tres 2019-5-19 01:06:28 | 只看该作者
全局:
贴一个 JavaScript 版解法
不是很 robust,但足够作为面试答案

  1. const kthMissingNumber = (arr, k) => {

  2.     let left = 0, right = arr.length - 1

  3.     while (left + 1 < right) {
  4.         let mid = Math.floor((left + right) / 2)
  5.         // calculate the number of missing numbers
  6.         nMissed = (arr[mid] - arr[left]) - (mid - left)
  7.         if (nMissed < k) {
  8.             left = mid
  9.             k = k - nMissed
  10.         } else {
  11.             right = mid
  12.         }
  13.     }

  14.     if (arr[left] + k >= arr[right]) return -1
  15.     return arr[left] + k
  16.    
  17. }
复制代码

评分

参与人数 2大米 +4 收起 理由
jluo9612 + 1 赞一个
tinlittle + 3 这个不常见,谢谢参与

查看全部评分

回复

使用道具 举报

全局:
唉,看不了啊...靠每日登陆和答题一个月了,还是好多好多看不了。哪位大哥哥大姐姐赏点分

评分

参与人数 1大米 +2 收起 理由
tinlittle + 2 题目已经重贴了个120分的,你看的到的

查看全部评分

回复

使用道具 举报

全局:
感谢分享,非常好的一道题
回复

使用道具 举报

🔗
bazingaa 2019-5-19 04:16:48 | 只看该作者
全局:
这道题确实蛮有意思的
回复

使用道具 举报

全局:
两个月不刷题,看到这题都没有什么思路。。感谢分享!
回复

使用道具 举报

🔗
willwillzhang 2019-5-20 01:41:20 | 只看该作者
全局:
liaohs49 发表于 2019-5-18 20:38
Java version, 送一个unittest
[mw_shl_code=java,true]import static org.junit.Assert.*;

You are given a sorted without any duplicate integer array

test case 要改改

补充内容 (2019-5-20 01:42):
my fault, never mind
回复

使用道具 举报

🔗
tuwei 2019-5-20 08:42:35 来自APP | 只看该作者
全局:
挺好的写的
回复

使用道具 举报

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

本版积分规则

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