上岸 I 北美8月第三周算法面試真題匯總

2021-02-16 北美上岸君

上岸算法

死磕100%上岸率的精品小班課

關注我們,第一時間獲得大廠面試真題講解

應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!

題目描述:Reconstruct Itinerary

Given a list of airline tickets represented by pairs of departure and arrival airports [from, to], reconstruct the itinerary in order. All of the tickets belong to a man who departs from JFK. Thus, the itinerary must begin with JFK.

Note:

If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string. For example, the itinerary ["JFK", "LGA"] has a smaller lexical order than ["JFK", "LGB"].

All airports are represented by three capital letters (IATA code).

You may assume all tickets form at least one valid itinerary.

One must use all the tickets once and only once.

Example 1:

Input: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]Output: ["JFK", "MUC", "LHR", "SFO", "SJC"]

Example 2:

Input: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]Output: ["JFK","ATL","JFK","SFO","ATL","SFO"]Explanation: Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"].             But it is larger in lexical order.

題解:


這題是一道歐拉路徑的題,歐拉路徑的含義:一個連通有向圖 G 有歐拉路徑,指存在一個頂點,從它出發,沿著有向邊的方向,可以不重複地遍歷圖中所有的邊。於是這題我們可以先 map 構建鄰接表,然後 dfs 起點 "JFK",訪問過的邊從鄰接表中刪除, 當鄰接表中沒有節點時,把點加入結果集。

參考代碼

class Solution {
    public List<String> findItinerary(List<List<String>> tickets) {
        List<String> ans = new ArrayList<>();
        //特殊條件判斷
        if (tickets == null || tickets.size() < 1) return ans;
        // 構造鄰接表
        HashMap<String, List<String>> map = new HashMap<>();
        for (List<String> e : tickets) {
            //e的連結表存在獲取e的鄰接表,不存在就new一個List
            List<String> edge = map.computeIfAbsent(e.get(0), k -> new ArrayList<>());
            edge.add(e.get(1));
        }
        // 鄰接表排序
        map.values().forEach(x -> x.sort(String::compareTo));
        dfs(map,ans,"JFK");
        return ans;
    }
    void dfs(HashMap<String, List<String>> map, List<String> ans, String start) {
        List<String> edge = map.get(start);
        //鄰接表中有節點繼續DFS
        while (edge != null && edge.size() > 0) {
            String p = edge.remove(0);
            dfs(map, ans, p);
        }
        //沒有節點,把點加入ans
        ans.add(0, start);
    }
}

題目描述:Reorder Data in Log Files

You have an array of logs.  Each log is a space delimited string of words.

For each log, the first word in each log is an alphanumeric identifier.  Then, either:

Each word after the identifier will consist only of lowercase letters, or;

Each word after the identifier will consist only of digits.

We will call these two varieties of logs letter-logs and digit-logs.  It is guaranteed that each log has at least one word after its identifier.

Reorder the logs so that all of the letter-logs come before any digit-log. The letter-logs are ordered lexicographically ignoring identifier, with the identifier used in case of ties.  The digit-logs should be put in their original order.

Return the final order of the logs.

Example  :

Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]

題解:


根據題目意思,我們可以用兩個List存字母日誌和數字日誌,再用自定義排序對字母日誌進行排序,數字日誌順序保持不變,最後再合併兩個List。這題主要考察的是我們Comparator。

參考代碼

class Solution {
    public String[] reorderLogFiles(String[] logs) {
        List<String> letterLogs = new ArrayList<>();
        List<String> numLogs = new ArrayList<>();
        // 將字母日誌和數字日誌分開,分別放入兩個list
        for (String log : logs) {
            int i = log.indexOf(" ") + 1;
            if (log.charAt(i) >= '0' && log.charAt(i) <= '9')
                numLogs.add(log);
            else
                letterLogs.add(log);
        }
        Collections.sort(letterLogs, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                // 取字母a日誌的標識符及內容
                int ai = a.indexOf(" ");
                String ida = a.substring(0, ai);
                String loga = a.substring(ai + 1);
                // 取字母b日誌的標識符及內容
                int bi = b.indexOf(" ");
                String idb = b.substring(0, bi);
                String logb = b.substring(bi + 1);

                // 對比二者內容,如果相同則對比標識符
                int cmp = loga.compareTo(logb);
                if (cmp == 0) 
                    return ida.compareTo(idb);
                return cmp;
            }
        });
        letterLogs.addAll(numLogs);
        return letterLogs.toArray(new String[letterLogs.size()]);
    }
}

題目描述Merge Intervals


Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]]Explanation: Intervals [1,4] and [4,5] are considered overlapping.

1.首先根據二維數組中每個一維數組的[0]進行升序排序,即根據start進行排序;

2.排序好的區間,從左到右進行合併區間

3.合併條件是前一個的結束 大於等於 後一個的開始(區間重複)

4.左邊一定是當前區間的左邊界

5.若區間有重疊,右邊界進行比較打擂臺

參考代碼

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        //特殊條件判斷
        if (intervals == null || intervals.length == 0) return res.toArray(new int[0][]);
        //根據區間的start進行排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        int i = 0;
        //從排序好的區間從左到右合併區間
        while (i < intervals.length) {
            //左邊一定是當前區間的左邊界
            int left = intervals[i][0];
            int right = intervals[i][1];
            //若區間有重疊,右邊界進行比較打擂臺
            while (i < intervals.length - 1 && intervals[i + 1][0] <= right) {
                i++;
                right = Math.max(right, intervals[i][1]);
            }
            //直到沒有重複,合併區間完畢
            res.add(new int[]{left, right});
            i++;
        }
        return res.toArray(new int[0][]);
    }
}



題目描述:Kth Largest Element in a Stream


Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

Example :

KthLargest kthLargest = new KthLargest(3, arr);kthLargest.add(3);   // returns 4kthLargest.add(5);   // returns 5kthLargest.add(10);  // returns 5kthLargest.add(9);   // returns 8kthLargest.add(4);   // returns 8

題解:

因為是kth問題,平常kth問題可以用快排,也可以用heap來解決,這題主要注意的是in stream,所以第k大是動態更新的,我們並不能一次拿到所有數據,用heap來解決,代碼簡潔明。

參考代碼

public class KthLargest {
    private PriorityQueue<Integer> queue;
    private int limit;
    public KthLargest(int k, int[] nums) {
        limit = k;
        queue = new PriorityQueue<>(k);
        for (int num : nums) {
            add(num);
        }
    }
    public int add(int val) {
        if (queue.size() < limit) {
            queue.add(val);
        } else if (val > queue.peek()) {
            queue.poll();
            queue.add(val);
        }
        return queue.peek();
    }
}

    杭州上岸算法網絡科技有限公司

上岸算法網絡科技有限公司是一家致力於用高質量,高互動性小班課程來幫助學生更好的在就業市場中定位以及求職的公司。我們以頂級的課程質量,高互動性的教學方式以及獨特的小班教學模式來幫助學生更快的跨過求職的鴻溝,用最高效,經濟,合理的方式幫助更多學生快速找到夢寐以求的工作。


相關焦點

  • 上岸 I 北美大廠11月第三周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠1月第二周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美大廠2月第二周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美10月第四周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠10月第四周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠12月第四周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 秋招衝刺,最近拿到offer的同學都說它活少錢
    上岸算法(www.shanganonline.com)的金牌課程上岸數據科學小班課,5人小班化教學,24-30小時的沉浸式訓練,結合學生基礎因材施教,通過FLAG真題projects,讓你簡歷瞬間長滿關鍵詞,秒過簡歷關。同時在應用框架之上強調創新思維,與老師模擬合作打造最佳BQ故事。
  • 今日最新真題 | 2020年8月16日 全國各地 公考 面試真題 匯總集合
    【今日最新真題】2020年8月16日 各地 公考 面試真題 匯總集合~(二)2020年8月16日湖北選調面試真題:1、談談在學習工作中如何提高和保持政治忠誠?2、向組織匯報作為90後在疫情期間的思想學習工作情況。3、你的村子要設置垃圾處理回收點,村民認為不能在家門口設置,回收站工作人員想把站點設置在路邊方便運輸,你是村幹部,如何解決?
  • 想一個月搞定面試算法?來《九章算法班》!第一節免費試聽!
    想尋找北美software engineer職位的同學。想接受系統的面試算法培訓的同學,或想換工作的但是算法比較薄弱的工程師。0算法基礎即可參與學習。主講令狐衝老師,曾就職於超過2家矽谷頂尖IT企業,  北美和國內頂尖IT企業offer數10+,面試人數超過200人。課程大綱由易到難。只要你會任何一門計算機語言即可參加。尤其適合算法基礎相對薄弱的 or 轉專業的 or 想跳槽卻太久沒刷題的同學。
  • 2020年8月全國面試真題整理匯總
    2020年8月8日赤峰事業單位面試真題第一題:習近平總書記強調「年輕人學習要樹立終身學習的觀念」你怎麼理解?2020年8月8日泗陽事業單位面試真題 第一題:魯國有個人擅長編草鞋,妻子擅長織白絹,越國人不喜歡穿鞋帶帽。有人說他去越國肯定很窮,他卻說如果我能讓越國人帶帽子穿鞋子那麼我就會很富有。請結合自身實際談談對你的啟示。
  • 九章算法強化班 | 第一節免費試聽,提升算法面試技能!`
    月15日周四 22:00-24:00 北京時間 11月16日周五 11:00-13:00課程安排:每節2小時,共7節,第一節免費試聽。報名網址:http://t.cn/RAC7Era親愛的朋友們,根據2018年最新面試情況,《算法強化班》又進行了一次巨大的革新啦。同時《算法強化班》的ladder也添加了很多最新的面試真題哦!根據最近面試情況,以及《九章算法班》題型的調整,大幅度對課程內容進行了修改:1.
  • 2020重慶直屬校「小升初面試」真題匯總!沒上岸,還不看看?
    現如今,要想擠進一個好的初中,家長們都需要提前做準備,特別是小高年級的家長,在五年級下時就開始帶著自己的孩子東奔西跑,去各個初中遞簡歷,參加筆試、面試。為了緩解大家的煩惱,小編收集了一些重慶名校初中小升初的面試真題,各位有需要的家長可以看看~宏帆八中
  • 國內外雅思託福口語筆試真題蹲點回憶匯總2021年2月3月4月5月6月7月8月9月10月11月12月
    2021年2月18日19日20日21日22日23日24日-2月25日-2月27日2月6日-2月20日,1月18日19日20日-1月21日-1月23日國內外最新口語真題蹲點圖片匯總日,10月8日加拿大,美國等北美考區雅思A類、G類真題回憶匯總(聽說讀寫答案+機經整理匯總)請進入http://bbs.ieltstofelglobal.com/thread-250911-1-1.html (每一場北美、歐洲雅思考區期待更多的考生來回憶:A類,G類,UKVI,聽說讀寫,最好能回憶英文題目。
  • 【2020國考面試】鐵路公安系統面試真題(8月28日 )
    【2020國考面試】鐵路公安系統面試真題(8月28日 )(時間:20分鐘4道題1、某市採取一個措施,對於6個月內無違章違法的機動車駕駛員違停時採取批評教育而不罰款,對此,你怎麼看?2、要建立景區商戶黑名單,然後讓你組織開展,重點搜集哪些信息?用什麼方式開展?3、有個老人有腦梗,然後不希望連累家人就留了封信,家人找不到後報警了。
  • 2020國考面試:一個月的時間怎麼準備面試?
    2020國考面試:一個月的時間怎麼準備面試?由國家公務員考試網面試欄目由提供,更多關於2020國考面試,一個月的時間怎麼準備面試,國家公務員考試面試的內容,請關注國家公務員考試網/廣東公務員考試網!
  • 字節面試也考原題,難度堪比FB
    繼上周國內字節宣布要在年底之前招滿10,000人後,這兩天北美字節也開啟了強勢招聘!據已上岸學員爆料,北美字節的多個業務部門都在擴招,可以內推!崗位雖多但競爭激烈,建議大家投遞從速,畢竟越早投機會越大!
  • 《50套SAT歷年真題匯總 電子版/紙質版》領取(截止2020年03月北美/亞太)
    為了方便廣大SAT考生的練習需求,我們對現行的OG+真題 共計48套做了校對和印刷(截止2020年03月北美/亞太),並添加了2套市面上並不常見的非公開題(絕密題)——2017年06月北美第二套 & 2017年09月北美,合計50套。
  • 免費 ML 算法面試大全,GitHub 上破萬星
    在本項目中,作者 imhuay 為大家準備了 ML 算法工程師面試指南,它提供了完整的面試知識點、編程題及題解、各科技公司的面試題錦等內容。目前該 GitHub 項目已經有 1 萬+的收藏量,想要跳一跳的同學快來試試吧。如下所示為整個項目的結構,其中從機器學習到數學主要提供的是筆記與面試知識點,讀者可回顧整體的知識架構。
  • 2015-2020合肥事業單位面試真題匯總!快收藏
    2015-2020合肥事業單位面試真題匯總!第三題:單位同事小王在無意中向你透露,領導在多個場合透露出對你不滿,你該怎麼做?2019年11月17日合肥市直事業單位面試真題第一題:同樣一個小時,有人騎自行車走,又累又慢;有的人開車走,舒適快捷;有的人坐飛機,又快又舒適。請以「選擇」為題目即興演講。
  • 九章算法班 | 1個月搞定面試算法,更有內推等著你
    簡直太坑爹為了應對最新的面試九章算法全面搜集最新面經研究最新面試套路升級推出《九章算法班V5.0》文末可獲取《2018最新面試熱點、套路總結》PPT算法題目千千萬曾就職於超過2家矽谷頂尖IT企業, 北美和國內頂尖IT企業offer數10+,面試人數超過200人。前算法競賽國家集訓隊員,刷題數目超過 3000 道除了主講老師外,我們還配備認真負責的助教哦。悄悄告訴你們,他們絕大多是ACM、ICPC、和各類計算機競賽的獲獎者哦。