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

2021-03-02 北美上岸君

上岸算法

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

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

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

Sambanova Systems OA 10月面經題

題目描述:K Closest Points to Origin

We have a list of points on the plane.  Find the K closest points to the origin (0, 0).

(Here, the distance between two points on a plane is the Euclidean distance.)

You may return the answer in any order.  The answer is guaranteed to be unique (except for the order that it is in.)

Example 1 :

Input: points = [[1,3],[-2,2]], K = 1The distance between (1, 3) and the origin is sqrt(10).The distance between (-2, 2) and the origin is sqrt(8).Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin.We only want the closest K = 1 points from the origin, so the answer is just [[-2,2]].

Example 2 :

Input: points = [[3,3],[5,-1],[-2,4]], K = 2(The answer [[-2,4],[3,3]] would also be accepted.)

題解:


這個問題的本質其實就是對於點到原點的距離,求 Top K 元素。Top K元素的題型可以用快排思想,也可以用堆。堆的這題需要自定義排序方法,因為比較距離長短,我們可以用歐幾裡得計算距離。

參考代碼

class Solution {
    public int[][] kClosest(int[][] points, int K) {
        //構造一個大頂堆自定義堆排序方法
        //以歐幾裡得距離作為判定優先級的標準
        PriorityQueue<int[]> max = new PriorityQueue<>( (a, b) -> (count(b) - count(a)) );
        int[][] res = new int[K][2];
        for(int[] point : points){
            //先往裡面添加K個元素
            if(max.size() < K){
                max.add(point);
                continue;
            }
            //始終保持最小的K的元素
            if(count(point) < count(max.peek())){
                max.poll();
                max.add(point);
            }
        }
        for(int i = 0; i < K; ++i){
            res[i] = max.poll();
        }
        return res;  
    }
    //歐幾裡得距離計算
    private int count(int[] num){
        int res = num[0] * num[0] + num[1] * num[1];
        return res;
    }
}

題目描述:Course Schedule II

There are a total of n courses you have to take, labeled from 0 to n-1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.

There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.

Example 1 :

Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is [0,1] .

Example 2 :

Input: 4, [[1,0],[2,0],[3,1],[3,2]]Output: [0,1,2,3] or [0,2,1,3]Explanation: There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. So one correct course order is [0,1,2,3]. Another correct ordering is [0,2,1,3] .

題解:


這題考的是拓撲排序,可以用BFS來做。

1.建立入度表,入度為 0 的節點先入隊

2.當隊列不為空,節點出隊,標記學完課程數量的變量加 1,並記錄該課程

3.將課程的鄰居入度減 1

4.若鄰居課程入度為 0,加入隊列

用一個變量記錄學完的課程數量,一個數組記錄最終結果,簡潔好理解。

參考代碼

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        if (numCourses == 0) return new int[0];
        int[] inDegrees = new int[numCourses];
        // 建立入度表
        for (int[] p : prerequisites) { // 對於有先修課的課程,計算有幾門先修課
            inDegrees[p[0]]++;
        }
        // 入度為0的節點入隊列(即不需要先修其他課的課程加入隊列)
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < inDegrees.length; i++) {
            if (inDegrees[i] == 0) queue.offer(i);
        }
        // 記錄當前已經學完課程數量
        int count = 0;  
        // 已經學完的課程
        int[] res = new int[numCourses];
        // 根據提供的先修課列表,刪除入度為 0 的節點
        while (!queue.isEmpty()){
            int curr = queue.poll();
            // 將可以學完的課程加入結果當中
            res[count++] = curr;
            //把先修課是curr的鄰居課程的入度減1   
            for (int[] p : prerequisites) {
                if (p[1] == curr){
                    inDegrees[p[0]]--;
                    if (inDegrees[p[0]] == 0) queue.offer(p[0]);
                }
            }
        }
        //當課程數量與要學的課程數量相等時,直接返回
        if (count == numCourses) return res;
        return new int[0];
    }
}


題目描述Maximum Points You Can Obtain from Cards


There are several cards arranged in a row, and each card has an associated number of points The points are given in the integer array cardPoints.

In one step, you can take one card from the beginning or from the end of the row. You have to take exactly k cards.

Your score is the sum of the points of the cards you have taken.

Given the integer array cardPoints and the integer k, return the maximum score you can obtain.

Example 1:

Input: cardPoints = [1,2,3,4,5,6,1], k = 3Explanation: After the first step, your score will always be 1. However, choosing the rightmost card first will maximize your total score. The optimal strategy is to take the three cards on the right, giving a final score of 1 + 6 + 5 = 12.

Example 2:

Input: cardPoints = [2,2,2], k = 2Explanation: Regardless of which two cards you take, your score will always be 4.

這題求取的點數最大值,可以思路反一反,取剩餘數的最小值,因為剩餘數是連續的,等於這題是考長度len - k的連續子數組的最小值。這樣理解後就可以很快想出用滑動窗口來解答。

參考代碼

class Solution {
    public int maxScore(int[] cardPoints, int k) {
        int len = cardPoints.length, sum = 0;
        for (int cardPoint: cardPoints) {
            sum += cardPoint;
        }
        int min = Integer.MAX_VALUE, temp = 0;
        int length = len - k;
        for (int i = 0; i < len; i++) {
            temp += cardPoints[i];
            if (i >= length) {
                temp -= cardPoints[i - length];
            }
            if (i >= length - 1)
                min = Math.min(min, temp);
        }
        return sum - min;
    }
}


題目描述:Minimum Number of K Consecutive Bit Flips


In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray of length K and simultaneously changing every 0 in the subarray to 1, and every 1 in the subarray to 0.

Return the minimum number of K-bit flips required so that there is no 0 in the array.  If it is not possible, return -1.

Example 1:

Input: A = [0,1,0], K = 1Explanation: Flip A[0], then flip A[2].

Example 2:

Input: A = [1,1,0], K = 2Explanation: No matter how we flip subarrays of size 2, we can't make the array become [1,1,1].

題解:

這題可以用滑動窗口來解答,我們可以通過維護長度為k的翻轉隊列,來計算最後最少翻轉結果。因為當前位置 i 是否翻轉的情況是:

1)前k個數字一共翻轉了偶數次(i位置其實等於沒翻轉),並且當前 i 原數字是0

2)前k個數字一共翻轉了奇數次(i位置其實等於翻轉了),並且當前 i 原數字是1

可以用一個統一的表達式 翻轉次數 time % 2 == A[i]. 

參考代碼

class Solution {
    public int minKBitFlips(int[] A, int K) {
        Queue<Integer> q = new LinkedList<Integer>();
        int res = 0;
        for(int i = 0; i < A.length; i++){
            // 維護長度為K的窗口
            if(!q.isEmpty() && q.element() + K == i)
                q.poll();
            //判斷當前位置 i 是否需要翻轉
            if(q.size() % 2 == A[i]){
                if(i + K > A.length) return -1;
                res ++;
                q.offer(i);
            }
        }
        return res;
    }
}

相關焦點

  • 上岸 I 北美大廠10月第四周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠12月第四周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美8月第三周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠1月第二周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美大廠2月第二周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美大廠11月第三周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 秋招衝刺,最近拿到offer的同學都說它活少錢
    即使是無基礎的小白,也能在一個月內迅速提升ds崗的面試技能,幫助你迅速成長為符合一線大廠招聘標準的大數據人才。機器學習(mle)方向美西時間  2020/16 7-9PM   正式直播疫情之下,找工上岸困難上岸算法願意給北美同學提供由擁有5年以上北美
  • 想一個月搞定面試算法?來《九章算法班》!第一節免費試聽!
    想尋找北美software engineer職位的同學。想接受系統的面試算法培訓的同學,或想換工作的但是算法比較薄弱的工程師。0算法基礎即可參與學習。主講令狐衝老師,曾就職於超過2家矽谷頂尖IT企業,  北美和國內頂尖IT企業offer數10+,面試人數超過200人。課程大綱由易到難。只要你會任何一門計算機語言即可參加。尤其適合算法基礎相對薄弱的 or 轉專業的 or 想跳槽卻太久沒刷題的同學。
  • 九章算法強化班 | 第一節免費試聽,提升算法面試技能!`
    月15日周四 22:00-24:00 北京時間 11月16日周五 11:00-13:00課程安排:每節2小時,共7節,第一節免費試聽。報名網址:http://t.cn/RAC7Era親愛的朋友們,根據2018年最新面試情況,《算法強化班》又進行了一次巨大的革新啦。同時《算法強化班》的ladder也添加了很多最新的面試真題哦!根據最近面試情況,以及《九章算法班》題型的調整,大幅度對課程內容進行了修改:1.
  • 《50套SAT歷年真題匯總 電子版/紙質版》領取(截止2020年03月北美/亞太)
    2020年6月4日,下半年的SAT考位常規報名終於開始,這也意味著,目前10/11年級的學生們,新一輪SAT備考的開始。
  • 字節面試也考原題,難度堪比FB
    繼上周國內字節宣布要在年底之前招滿10,000人後,這兩天北美字節也開啟了強勢招聘!據已上岸學員爆料,北美字節的多個業務部門都在擴招,可以內推!崗位雖多但競爭激烈,建議大家投遞從速,畢竟越早投機會越大!
  • 國內外雅思託福口語筆試真題蹲點回憶匯總2021年2月3月4月5月6月7月8月9月10月11月12月
    2020年10月31日英國,德國,法國等歐洲考區雅思A類、G類真題回憶匯總(聽說讀寫答案+機經整理匯總)請進入http://bbs.ieltstofelglobal.com/thread-251220-1-1.html (每一場北美、歐洲雅思考區期待更多的考生來回憶:A
  • 九章算法班 | 贏秋招免費內推, 一個月搞定面試算法!
    簡直太坑爹為了應對最新的面試九章算法全面搜集最新面經研究最新面試套路升級推出《九章算法班V5.0》文末可獲取《2018最新面試熱點、套路總結》PPT算法題目千千萬曾就職於超過2家矽谷頂尖IT企業, 北美和國內頂尖IT企業offer數10+,面試人數超過200人。前算法競賽國家集訓隊員,刷題數目超過 3000 道除了主講老師外,我們還配備認真負責的助教哦。悄悄告訴你們,他們絕大多是ACM、ICPC、和各類計算機競賽的獲獎者哦。
  • 九章算法班 | 1個月搞定面試算法,更有內推等著你
    簡直太坑爹為了應對最新的面試九章算法全面搜集最新面經研究最新面試套路升級推出《九章算法班V5.0》文末可獲取《2018最新面試熱點、套路總結》PPT算法題目千千萬曾就職於超過2家矽谷頂尖IT企業, 北美和國內頂尖IT企業offer數10+,面試人數超過200人。前算法競賽國家集訓隊員,刷題數目超過 3000 道除了主講老師外,我們還配備認真負責的助教哦。悄悄告訴你們,他們絕大多是ACM、ICPC、和各類計算機競賽的獲獎者哦。
  • 獨家 | 在Python編程面試前需要學會的10個算法(附代碼)
    本文為大家介紹了最近在Python編程面試中反覆出現的10個基礎算法問題,並且給出了相應的解答過程。
  • 2020重慶直屬校「小升初面試」真題匯總!沒上岸,還不看看?
    現如今,要想擠進一個好的初中,家長們都需要提前做準備,特別是小高年級的家長,在五年級下時就開始帶著自己的孩子東奔西跑,去各個初中遞簡歷,參加筆試、面試。為了緩解大家的煩惱,小編收集了一些重慶名校初中小升初的面試真題,各位有需要的家長可以看看~宏帆八中
  • 【面試真題】2018年3月全國部分地區事業單位、公務員面試真題(匯總)
    2018年3月14日國家公務員(國稅)面試真題1、為了推動新發展理念,升級現代化經濟體系,現有10個項目,請從中選出2個進行闡述:(1)打贏脫貧攻堅戰(2)供給側改革(3)鄉村振興(4)綠色發展理念(5)全面依法治國(6)全面深化改革開放(7)共享發展(8)區域協調發展(9)創新驅動(10)健康中國戰略2、有3個會議室:(1)大會議室
  • 教師資格證面試多少分上岸
    【導讀】華圖寧夏教師招聘考試網同步華圖教育發布:教師資格證面試多少分上岸,詳細信息請閱讀下文!如有疑問請加【2020寧夏教師招聘考試交流群匯總】 ,更多資訊請關注寧夏教師微信公眾號(ningxiajsht),寧夏教師招聘考試培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:ht18295188220   2020下半年教師資格考試筆試成績已出,面試已開始報名,報名時間12月10日-12月13日。
  • 今日最新真題 | 2020年8月16日 全國各地 公考 面試真題 匯總集合
    【今日最新真題】2020年8月16日 各地 公考 面試真題 匯總集合~日湖南稅務補錄面試真題:考試形式:結構化小組1、X在全國企業家座談會上,提出了四點對小微企業的建議:第一,落實好紓困惠企政策。(二)2020年8月16日湖北選調面試真題:1、談談在學習工作中如何提高和保持政治忠誠?2、向組織匯報作為90後在疫情期間的思想學習工作情況。3、你的村子要設置垃圾處理回收點,村民認為不能在家門口設置,回收站工作人員想把站點設置在路邊方便運輸,你是村幹部,如何解決?
  • 免費 ML 算法面試大全,GitHub 上破萬星
    在本項目中,作者 imhuay 為大家準備了 ML 算法工程師面試指南,它提供了完整的面試知識點、編程題及題解、各科技公司的面試題錦等內容。目前該 GitHub 項目已經有 1 萬+的收藏量,想要跳一跳的同學快來試試吧。如下所示為整個項目的結構,其中從機器學習到數學主要提供的是筆記與面試知識點,讀者可回顧整體的知識架構。