1. 程式人生 > >Works Application 萬革始 2019校招面試題總結

Works Application 萬革始 2019校招面試題總結


2018

* DP,DFS題 leetcode

* 給出連結串列,給出k,將小於k的放置在前面,其餘保持不變
124521,k=3  -> 122145

* 旋轉連結串列:將列表向右旋轉k個位置,其中k為非負數。
如,123456,k = 2  -> 561234


* 判斷兩個二叉樹是否相等

* 判斷一個二叉樹是否為映象二叉樹

* 左右反轉二叉樹

* Z形層次遍歷二叉樹

* 字串相加

* zigzag題,leetcode

* 求最長迴文子序列,直接反過來求最長公共子序列就好了

* 區間合併

* LeetCode 15. 3Sum 三數之和

2017\2016

* 算兩個沒有公共字母的字串的最大長度積

* 第一題是要查詢陣列中的最小元素


* Find All Anagrams in a String.(不清晰)

* Decode String Given an encoded string,return it's decoded string

* 字串匹配

* 廣度優先搜尋

* 在一個字串中找另一個的同形異構體 leetcode 438 

* leetcode 9

* leetcode153,400

* nth digit題, leetcode

* 迴文?動態規劃  dp?

* 翻轉二叉樹、映象二叉樹,求深度

* 二叉樹的序列化和反序列化,leetcode

* 第一題是字串轉化為二叉樹與二叉樹轉化為字串的題(解決方案是BFS)。

例如:字串陣列 {1, 2, 3, null, null, null, null} 
轉化為對應的二叉樹為

   1
                     /    \
                    2      3
 null表示節點為空,按照二叉數從樹根(第一層),第二層進行遍歷。


  
* 一個數字陣列,將這些數字組合成一個最大的數
(定義一個排序函式,然後將排序的數字連線起來)。


 例如陣列 {3, 30, 34, 9} 組合後的最大數是 934330.

* 輸出從n個數中選取k個數的所有情況

* 連結串列 字串 

* 給定一個數,判斷這個數是否為2的次方,禁止使用迴圈

* 給定一個字串,按照zigzag轉換然後輸出新的字串

2015

* 2+5*8處理成其後綴表示式2 5 8 * +

* 字尾表示式計算結果的題

* 最長公共子串,最長公共子序列,括號匹配stack,多種括號的匹配

* 最長遞增子序列;最長連續相同子序列

* 兩個正整數M和N,M <= N,令0 < a < M,M <= b <= N,分別輸出以a為分子b為分母的可約和不可約分數

#include <iostream>
#include <vector>
using namespace std;
 
int gcd(int m, int n)
{
    if (n == 0)
    {
        return m;
    }
    else
    {
        return gcd(n, m % n);
    }
}
int main()
{  
    int m, n;
    vector<string> canReduce, cannotReduce;
    while (cin >> m >> n)
    {
        if (m >= n)
        {
            break;
        }
        for (int i = 1; i < m; i++)
        {
            for (int j = m; j <= n; j++)
            {
                char str[10];      
                sprintf(str, "%d/%d", i, j);
                if (gcd(i, j) == 1)
                {                   
                    cannotReduce.push_back(str);
                }
                else
                {
                    canReduce.push_back(str);
                }
            }
        }
        for (int i = 0; i < canReduce.size(); i++)
        {
            cout << canReduce.at(i).c_str() << " ";
        }
        cout << endl;
        for (int i = 0; i < cannotReduce.size(); i++)
        {
            cout << cannotReduce.at(i).c_str() << " ";
        }
        cout << endl;
    }
    return 0;
}

2014

* 字串全排列, 匹配

2013

* 全排序:給一個字串“acb”,輸出abc acb bac bca cab cba  /aab會怎麼樣