2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题

1. 奇偶数:

    题目描述:

2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题_第1张图片

2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题_第2张图片

 

    思路:双指针+排序;

            1.用双指针先将偶数和奇数分开,偶数在前,奇数在后;

            2.然后将偶数部分和奇数部分分别排序;

 

    AC代码:

#include 
#include 
#include 
using namespace std;

// return true is n is even, else return false
inline bool isEven(const int n)
{
    return (n & 1) == 0;
}

int main(int argc, char* argv[])
{
    // Input data:
    vector nums;
    int num;
    while(cin >> num)
    {
        nums.push_back(num);
        char c;
        cin >> c;
        if(c == ';') break;
    }
    
    int n;
    cin >> n;
    
    // 双指针分开奇偶数:
    int i = 0;
    int j = nums.size()-1;
    while(i < j)
    {
        while(i < j && isEven(nums[i])) i++;
        while(i < j && !isEven(nums[j])) j--;
        if(i < j) swap(nums[i], nums[j]);
    }
    
    // 排序前n个数中的偶数(其中前j个都是偶数)和余下的所有奇数:
    sort(nums.begin(), nums.begin()+j, greater());
    sort(nums.begin()+j, nums.end(), greater());
    
    // 输出前n个数:
    for(int i = 0; i < n-1; i++)
        cout << nums[i] << ",";
    cout << nums[n-1];
    
    return 0;
}

 

2.扑克牌

    题目描述:

2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题_第3张图片

2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题_第4张图片

2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题_第5张图片

 

    思路:回溯

        1.利用回溯法列举出所有可能;

        2.然后判断结果是否符合条件,若符合,输出解;

 

   AC代码:

#include 
#include 
using namespace std;

void outputRes(string& res)
{
    const int n = res.size();
    for(int i = 0; i < n-1; i++)
        cout << res[i] << " ";
    cout << res[n-1] << endl;
}

void backtrace(int i, int n, string res, string s1, string s2, string tmp)
{
    if(i == n)
    {
        if(tmp == s2) outputRes(res);
        return;
    }
    
    string left = string(1, s1[0]);
    s1 = s1.substr(1, s1.size()-1);
    
    backtrace(i+1, n, res+"d", s1, s2, tmp);
    backtrace(i+1, n, res+"l", s1, s2, left+tmp);
    backtrace(i+1, n, res+"r", s1, s2, tmp+left);
}

int main(int argc, char* argv[])
{
    int s;
    cin >> s;
    
    while(s-- > 0)
    {
        string s1, s2;
        cin >> s1;
        cin >> s2;
        
        const int n = s1.size();
        cout << "{" << endl;
        backtrace(0, n, "", s1, s2, "");
        cout << "}" << endl;
        
    }
    
    return 0;
}

3.二维数组中找第k大数:(未AC)

   题目描述:(leetcode 668)

   做法:

        (1)用数组存储,然后排序,最后输出第k大数;(内存超限)

        (2)用大根堆;(内存超限)

 

你可能感兴趣的:(2019秋招笔试:20190901-拼多多-后端研发工程师-笔试题)