Zenefits面试题

Problem Description

难度:简单 / 中等

a. 给出一系列以 a1/b1,a2/b2 这样表示的分数,返回它们的和约分后的形式。

b. 给定一个一维数组 a,求满足 i < j 并且 a[i] < a[j] 的元素对中 a[j] - a[i] 的最大值。

Implementation

a. 给出一系列以 a1/b1,a2/b2 这样表示的分数,返回它们的和约分后的形式。

string FractionSum(string A, string B) {

    int len_A = size(A);

    int len_B = size(B);

    if(!len_A) {

        return "ERROR_A";

    }

    if(!len_B) {

        return "ERROR_B";

    }

    int nomi[2] = {0}, denom[2] = {0};

    ​getNum(nomi[0], denom[0], A, len_A); 

    getNum(nomi[1], denom[1], B, len_B);

    ​if(!denom[0] || !denom[1]) {

    ​    ​return "MAX_NUM";

    ​}​​ 

    return getSimplyFormtat(nomi[0]*denom[1]+nomi[1]*denom[0], denom[0]*denom[1]);

}



string getSimplyFormat(int nom, int denom)

​​{

    ​int pubDenom = findPublicDenom(nom > denom?nom:denom, nom>denom?nom:denom);

    ​return to_string(nom/pubDenom)  +  "/" + to_string(denom/pubDenom);

}



int dindPublicDenom(int bigger, int smaller)

{

    ​int tmp = 1;

    ​while(bigger - smaller != 0) {

    ​    ​tmp = bigger - smaller;

    ​    ​if(tmp > smaller) {

    ​    ​    ​bigger = tmp;

    ​    ​}​​

    ​    ​else {

    ​    ​    ​bigger  = smaller;

    ​    ​    ​smaller = tmp; 

    ​    ​}​​

    ​}



    ​return tmp;

​​​

}​​​​​

​​​​

void getNum(int &nomi, int &denom, string A, int len_A) {

    ​bool div = false;

    ​for(int idx = 0; idx < len_A; idx++) {

        if(isdigit(A[idx])) {

            if(div) {

                denom[0] = 10*denom[0] + (A[idx]-'0');

            }    

            else {

                nomi[0]   =  10*nomi[0] + (A[idx] - '0');

            }

        }

    ​    ​else if(A[idx] == '/') {

    ​    ​    ​div = ture;

    ​    ​}​​

    }

}

​​​

b. 给定一个一维数组 a,求满足 i < j 并且 a[i] < a[j] 的元素对中 a[j] - a[i] 的最大值。

int findLargestDiff(vector<int>& nums)​
{
    ​int res = 0;
    ​int size = nums.size();
    ​if(!size) {
    ​    ​return res;
    ​}​​
    ​for(int idx0 = 0; idx0 < size - 1; idx0++) {
    ​    ​for(int idx1 = idx0 + 1; idx1 < size; idx1++) {
    ​    ​    ​res = max(nums[idx1] - nums[idx0], res);
    ​    ​}​
    ​}​
    ​return res;​
}​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值