携程C++笔试!!!
发布于 2017-09-21 20:39 2259 次浏览 0 赞 来自 资源分享  

第一题他妈巨简单,但是我他妈为什么总是ac 43% 我日 居然是这个坑爹的输入!!! 中间有空格的输入字符串 需要自己组合啊!!! 我日!!! 一直在想哪里错了!!!哎

第二题Leetcode类似的题目有的 

第三题Leetcode原题 一模一样!!!

5 条回复

我第一题也是43%,楼主能否发一发其他两题AC的代码了

2017-09-21 20:47
coder_NC44SQXD 回复 acmcodereH431ZFJ

坑比处就在输入 比如 Hello World! 如果你光光 cin>> str,TM得到的str=“Hello” 就是因为这个!!

2017-09-21 20:51
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

double median(vector<int> nums1, vector<int> nums2) {
    int m = nums1.size(), n = nums2.size();
    
    int bigger, smaller;
    vector<int> bigger_nums, smaller_nums;
    if (m > n) {
    	bigger = m;
        smaller = n;
        bigger_nums = nums1;
        smaller_nums = nums2;
    } else {
    	bigger = n;
        smaller = m;
        bigger_nums = nums2;
        smaller_nums = nums1;
    }
    
    if (smaller == 0) {
        if (bigger == 0) return 0.0;
        else {
            if (bigger % 2 == 0) {
                return (bigger_nums[bigger/2] + bigger_nums[bigger/2 - 1]) / 2.0;
            } else {
                return double(bigger_nums[bigger/2]);
            }
        }
    }
    
    int i_min = 0, i_max = smaller, half = (smaller + bigger +  1) / 2;
    while (i_min <= i_max) {
    	int i = (i_min + i_max) / 2;
        int j = half - i;
        if (i < i_max && bigger_nums[j - 1] > smaller_nums[i]) i_min++;
        else if (i > i_min && bigger_nums[j] < smaller_nums[i - 1]) i_max--;
        else {
        	int max_left = 0;
            if (i == 0) max_left = bigger_nums[j - 1];
            else if (j == 0) max_left = smaller_nums[i - 1];
            else max_left = max(smaller_nums[i - 1], bigger_nums[j - 1]);
            int min_right = 0;
            if (i == smaller) min_right = bigger_nums[j];
            else if (j == bigger) min_right = smaller_nums[i];
            else min_right = min(smaller_nums[i], bigger_nums[j]);
            return (max_left + min_right) / 2.0;
        }
    }
    return 0.0;
}

int main(int argc, char* argv[]) {
    int m, n;
    vector<int> nums1, nums2;
    
    cin >> m;
    while (m--) {
        int num;
        cin >> num;
        nums1.push_back(num);
    }
    cin >> n;
    while (n--) {
        int num;
        cin >> num;
        nums2.push_back(num);
    }
    
    cout << median(nums1, nums2) << endl;
}

这是第三题!!!

2017-09-21 20:53
acmcodereH431ZFJ 回复 coder_NC44SQXD

我就是这样的,把字符串加起来了通过率更低了。

2017-09-21 21:02
acmcodereH431ZFJ 回复 coder_NC44SQXD

谢谢啦

2017-09-21 21:02
添加回复
回到顶部