首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化和查找我可能遗漏的边缘案例-2编码面试问题

优化和查找我可能遗漏的边缘案例-2编码面试问题
EN

Stack Overflow用户
提问于 2020-03-28 23:34:02
回答 2查看 32关注 0票数 1

背景-我参加了一个在线编码测试,遇到了类似的问题,与隐藏的评分标准相比,我的成绩相当差,我希望能有另一双眼睛来看它,也许能帮助指出我的一些错误。

练习题-

任务:给定一个整数,将数字5注入其中,以获得最大可能的整数条件:(-80000...80000)需要处理的范围

预期输入: int

预期输出: int

测试用例:-999 -> -5999

代码语言:javascript
复制
 80 -> 850  
代码语言:javascript
复制
var lrgInt = function(num) {
    var stringInt = num.toString();
    for (let i = 0; i < stringInt.length; i++) {
        if (stringInt.charAt(i) === "-") {
            return parseInt([stringInt.slice(0, 1), '5', stringInt.slice(1)].join(''));
        }else if (stringInt.charAt(i) < 5) {
             return parseInt([stringInt.slice(0, i), '5', stringInt.slice(i)].join(''));
        }
    }
    return parseInt([stringInt.slice(0, stringInt.length), '5', stringInt.slice(stringInt.length)].join(''));
};

任务:确定在符合条件的数字上完成的操作次数,将其减少到0。

条件:

  • 如果数字是奇数,则减1
  • 如果数字是偶数,则除以2

预期输入: int

预期输出: int

代码语言:javascript
复制
var operations = 0;

var numberOfSteps  = function(num) {
    if (num === 0){
        return operations;
    }else if (num % 2 == 0) {
        operations++;
        return numberOfSteps(num/2);
    } else {
        operations++;
        return numberOfSteps(num-1);
    }
};
EN

回答 2

Stack Overflow用户

发布于 2020-03-28 23:44:48

对于第二个问题,您可以在没有全局计数器的情况下将递归结果与调整后的数字相加1。

代码语言:javascript
复制
function numberOfSteps(number) {
    if (!number) return 0;
    if (number % 2) return 1 + numberOfSteps(number - 1);
    return 1 + numberOfSteps(number / 2);    
}

console.log(numberOfSteps(5)); // 5 4 2 1 0

票数 2
EN

Stack Overflow用户

发布于 2020-03-28 23:49:54

对于第一个问题,我们观察到,如果数字是正数,我们想要在第一个小于5的数字之前注入5,但是如果它是负数,那么我们想要在第一个大于5的数字之前注入它。对于第二个问题,我们可以只使用一个简单的while循环。

代码语言:javascript
复制
function largestNum(num) {
    if (num == 0) {
        // this edge case is weird but I'm assuming this is what they want
        return 50;
    }
    var negative = num < 0;
    var numAsStr = Math.abs(num).toString();
    var inj = -1;
    for (var i = 0; i < numAsStr.length; i++) {
        var cur = parseInt(numAsStr[i], 10);
        if ((!negative && cur < 5) || (negative && cur > 5)) {
            // we found a place to inject, break
            inj = i;
            break;
        }
    }
    if (inj == -1) {
        // didn't inject anywhere so inject at the end
        inj = numAsStr.length;
    }
    return (
        (negative ? -1 : 1) *
        parseInt(numAsStr.substr(0, inj) + "5" + numAsStr.substr(inj))
    );
}

function numSteps(num) {
    var steps = 0;
    while (num != 0) {
        if (num % 2) {
            // it's odd
            num--;
        } else {
            num /= 2;
        }
        steps++;
    }
    return steps;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60902818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档