一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 979|回复: 11
收起左侧

linkedin的一个题,求解答

[复制链接] |试试Instant~ |关注本帖
ariesxiao 发表于 2016-8-28 12:02:51 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类 硕士 全职@Linkedin - 内推 - 技术电面 |Other其他

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
其实就是leetcode上的题,求整数x的平方根,当时不该嘴贱问一句,结果是不是也要求整数
然后那个面试官说,她本来想的是结果也要求整数的,但看你这么问,那我们保留两位小数如何

本来直接就二分的,保留两位小数完全不知道怎么做了,就跟她扯牛顿迭代法。然后她说牛顿迭代法编程算法的东西太少了,都是数学,问我能不能用其他方法做,然后强行做二分,没做出来,不知道二分和保留两位小数怎么兼容. 1point 3acres 璁哄潧

然后就跪了. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
dhldxy 发表于 2016-8-28 12:18:43 | 显示全部楼层
hmm,是不是还是一样用二分法?就是在比较的时候,.鏈枃鍘熷垱鑷1point3acres璁哄潧
               if(abs(prod-x) <= 0.01){
                    return mid;
                }
                else if(prod-x > 0.01){
                    right = mid-1;. from: 1point3acres.com/bbs
                }
                else{
                    left = mid+1;
                }.鏈枃鍘熷垱鑷1point3acres璁哄潧
不是很确定。
. 鍥磋鎴戜滑@1point 3 acres
补充内容 (2016-8-28 12:56):. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
发现错了。 mid - 1 和  mid + 1这样就不对了。
回复 支持 反对

使用道具 举报

阿满 发表于 2016-8-28 12:35:22 | 显示全部楼层
long x = x* 1000000 然后再用原来的2分
回复 支持 反对

使用道具 举报

 楼主| ariesxiao 发表于 2016-8-28 12:38:32 | 显示全部楼层
dhldxy 发表于 2016-8-28 12:18
hmm,是不是还是一样用二分法?就是在比较的时候,. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
               if(abs(prod-x)  0.01){
             ...

我之前做LEETCODE这个题的时候代码是这个,当时没想清楚怎么改成保留两位小数的情况
public class Solution {
    public int mySqrt(int x) {. 鍥磋鎴戜滑@1point 3 acres
        if (x<0)
        return -1;
        
        int start = 1;
        int end = x/2+1;
        int lastMid = 0; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
        while (start<=end)
        {
            int mid = start+(end-start)/2;
            if (mid == x/mid). more info on 1point3acres.com
            {
                return mid;
            }
            else if (mid < x/mid)
            {
                lastMid = mid;
                start = mid + 1;
            }
            else
            {
                end = mid - 1;
            }
        }
        
        return lastMid;
        
    }. 1point3acres.com/bbs
}
回复 支持 反对

使用道具 举报

 楼主| ariesxiao 发表于 2016-8-28 12:39:28 | 显示全部楼层
阿满 发表于 2016-8-28 12:35
long x = x* 1000000 然后再用原来的2分

这个乘以1000000是怎么得到的?
回复 支持 反对

使用道具 举报

b00901192 发表于 2016-8-28 14:28:12 | 显示全部楼层
我的想法是用 leetcode 原題的 binary search 可以求得小數點前的數字。接下來再做一次 binary search: 因為要求兩位 begin = 0.01, end = 0.99 剩下就跟原題ㄧ樣不斷逼近。
回复 支持 反对

使用道具 举报

阿满 发表于 2016-8-28 22:33:52 | 显示全部楼层
ariesxiao 发表于 2016-8-28 12:39
这个乘以1000000是怎么得到的?
. from: 1point3acres.com/bbs
sqrt(5) = 2.236xxxxx. 1point 3acres 璁哄潧
sqrt (5000000) = 2236.xxxx
回复 支持 反对

使用道具 举报

青之帝 发表于 2016-8-28 23:20:37 | 显示全部楼层
阿满 发表于 2016-8-28 22:33. 1point3acres.com/bbs
sqrt(5) = 2.236xxxxx
sqrt (5000000) = 2236.xxxx
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
这个 想法 不错。
回复 支持 反对

使用道具 举报

alucardzhou 发表于 2016-9-5 00:19:29 | 显示全部楼层
可以分两步来得到小数点后一位和小数点后两位
比方我们得到了85的平方根个位为9
然后从9.0,9.1,9.2,...,10.0之间binary找出最合适小数点后一位于是找到9.2
接着再从9.20,9.21,...9.30之间找到最适合的小数点后两位。
这两步都是log11,可以认为是个常数吧
回复 支持 反对

使用道具 举报

小A要当码农 发表于 2016-9-5 01:15:16 | 显示全部楼层
额,请问LinkedIn现在是开始放new grad headcount了嘛
回复 支持 反对

使用道具 举报

 楼主| ariesxiao 发表于 2016-9-9 05:50:33 | 显示全部楼层
alucardzhou 发表于 2016-9-5 00:19
可以分两步来得到小数点后一位和小数点后两位
比方我们得到了85的平方根个位为9
然后从9.0,9.1,9.2,... ...

这个思路不错,我没想到从9.0到9。1 到9.2这样枚举,我还试图在0.01到0.99之间做二分,然后发现这样没法二分
回复 支持 反对

使用道具 举报

alucardzhou 发表于 2016-9-9 09:59:42 | 显示全部楼层
ariesxiao 发表于 2016-9-8 16:50
这个思路不错,我没想到从9.0到9。1 到9.2这样枚举,我还试图在0.01到0.99之间做二分,然后发现这样没法 ...

感觉0.01到0.99可以二分吧。
你取整数值是从1到99,计算的时候把整数值转换成0.01到0.99之间,然后算数值平方,比较大小就可以了吧
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-5 06:18

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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