上岸 I 北美大廠1月第二周算法面試真題匯總

2021-03-02 北美上岸君

上岸算法

任何只教知識的課程都是耍流氓

我們直擊上岸

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

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

Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j].

You need to return the number of important reverse pairs in the given array.

Example 1 :

Output: 2

Example 2 :

Output: 3

題解:


在歸併排序的時候計算翻轉對

歸併排序時:

注意:nums[j] * 2 計算得到的結果可能會大於Integer.MAX_VALUE,需要轉化成long


參考代碼

class Solution {
    public int reversePairs(int[] nums) {
        // 使用歸併排序,從小到大的進行排序
        if(nums.length < 2) {
            return 0;
        }
        return sort(nums,0,nums.length - 1);
    }
    public int sort(int[] nums,int left,int right) {
        if(left >= right) {
            return 0;
        }
        int mid = (left + right) / 2;
        int leftRes = sort(nums,left,mid);
        int rightRes = sort(nums,mid + 1,right);
        return leftRes + rightRes + merge(nums,left,mid,right);
    }
    public int merge(int[] nums,int left,int mid,int right) {
        int[] temp = new int[right - left + 1];
        int i = left;
        int j = mid + 1;
        int res = 0;
        int flag = 0;
        // 計算翻轉對
        while(i <= mid && j <= right) {
            if(nums[i] > 2 * (long)nums[j]) {
                res += mid - i + 1;
                j++;
            }else {
                i++;
            }
        }
        i = left;
        j = mid + 1;
        // 進行排序
        while(i <= mid && j <= right) {

            if(nums[i] < nums[j]) {
                temp[flag++] = nums[i++];
            }else {
                temp[flag++] = nums[j++];
            }
        }
        while(i <= mid) {
            temp[flag++] = nums[i++];
        }
        while(j <= right) {
            temp[flag++] = nums[j++];
        }
        for(int k = 0;k < temp.length;k++) {
            nums[left + k] = temp[k];
        }
        return res;
    }
}

題目描述:Random Pick with Weight

You are given an array of positive integers w where w[i] describes the weight of ith index (0-indexed).

We need to call the function pickIndex() which randomly returns an integer in the range [0, w.length - 1]. pickIndex() should return the integer proportional to its weight in the w array. For example, for w = [1, 3], the probability of picking the index 0 is 1 / (1 + 3) = 0.25 (i.e 25%) while the probability of picking the index 1 is 3 / (1 + 3) = 0.75 (i.e 75%).

More formally, the probability of picking index i is w[i] / sum(w).

Example 1 :

["Solution","pickIndex"][[[1]],[]]Output[null,0]ExplanationSolution solution = new Solution([1]);solution.pickIndex(); // return 0. Since there is only one single element on the array the only option is to return the first element.

題解:


這題採用前綴和和二分查找來解決。

參考代碼

class Solution {
    int[] sum;
    public Solution(int[] w) {
        sum = new int[w.length + 1];
        for (int i = 1;i <= w.length; i++){
            sum[i] = sum[i - 1] + w[i - 1];
        }
    }
        public int pickIndex() {
        int n = sum.length;
        int x = new Random().nextInt(sum[n - 1]) + 1;
        int l = 0, r = n;
        while (l < r){
            int mid = l + r >> 1;
            if (sum[mid] >= x) r = mid;
            else l = mid + 1;
        }
        return l - 1;
    }
}


題目描述Continuous Subarray Sum


Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to a multiple of k, that is, sums up to n*k where n is also an integer.

Example 1:

Input: [23, 2, 4, 6, 7],  k=6Output: TrueExplanation: Because [2, 4] is a continuous subarray of size 2 and sums up to 6.

Example 2:

Input: [23, 2, 6, 4, 7],  k=6Output: TrueExplanation: Because [23, 2, 6, 4, 7] is an continuous subarray of size 5 and sums up to 42

參考代碼

class Solution {
    public boolean checkSubarraySum(int[] nums, int k) {
        int N = nums.length, cache = 0;
        int[] sum = new int[N+1];
        HashSet<Integer> set = new HashSet<>();

        for (int i = 0; i < N; i++) {
            sum[i+1] = sum[i] + nums[i];
            int res = k == 0 ? sum[i+1] : sum[i+1] % k;
            if (set.contains(res)) return true;
            set.add(cache);
            cache = res;
        }

        return false;
    }
}



題目描述:Paint House

There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.


The cost of painting each house with a certain color is represented by a n x 3 cost matrix. For example, costs[0][0] is the cost of painting house 0 with color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.

Example 1:

Given costs = [[14,2,11],[11,14,5],[14,3,10]] return 10

house 0 is blue, house 1 is green, house 2 is blue, 2 + 5 + 3 = 10

Note:

All costs are positive integers.

y one island with area = 4.

題解:

房子i的最小塗色開銷是房子i-1的最小塗色開銷,加上房子i本身的塗色開銷。但是房子i的塗色方式需要根據房子i-1的塗色方式來確定,所以我們對房子i-1要記錄塗三種顏色分別不同的開銷,這樣房子i在塗色的時候,我們就知道三種顏色各自的最小開銷是多少了。我們在原數組上修改,可以做到不用空間。

參考代碼

class Solution {
    public int minCost(int[][] costs) {
        if(costs != null && costs.length == 0) return 0;
               // 直接用原數組
        for(int i = 1; i < costs.length; i++){
            // 塗第一種顏色的話,上一個房子就不能塗第一種顏色,這樣我們要在上一個房子的第二和第三個顏色的最小開銷中找最小的那個加上
            costs[i][0] = costs[i][0] + Math.min(costs[i - 1][1], costs[i - 1][2]);
            // 塗第二或者第三種顏色同理            costs[i][1] = costs[i][1] + Math.min(costs[i - 1][0], costs[i - 1][2]);
            costs[i][2] = costs[i][2] + Math.min(costs[i - 1][0], costs[i - 1][1]);
        }
        // 返回塗三種顏色中開銷最小的那個
        return Math.min(costs[costs.length - 1][0], Math.min(costs[costs.length - 1][1], costs[costs.length - 1][2]));
    }
}

相關焦點

  • 上岸 I 北美大廠2月第二周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美大廠11月第三周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠10月第四周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美大廠12月第四周算法面試真題匯總
    上岸算法任何只教知識的課程都是耍流氓我們直擊上岸關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態
  • 上岸 I 北美8月第三周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 北美10月第四周算法面試真題匯總
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解應廣大同學們的需求,我們將定期整理各大廠最新的面試題題解,由我們【上岸算法】資深的老師給大家進行分析講解,幫助大家實時掌握最新的面試動態,早日上岸!
  • 上岸 I 秋招衝刺,最近拿到offer的同學都說它活少錢
    即使是無基礎的小白,也能在一個月內迅速提升ds崗的面試技能,幫助你迅速成長為符合一線大廠招聘標準的大數據人才。機器學習(mle)方向美西時間  2020/16 7-9PM   正式直播疫情之下,找工上岸困難上岸算法願意給北美同學提供由擁有5年以上北美
  • 本科學歷進大廠是痴心妄想?——微軟上岸經驗分享
    這都要感謝Justin導師的算法課和後來的光流算法項目。分享一下自己的經歷吧。我大學的時候其實一直蠻糾結的,沒想過畢業以後就能直接進大廠。從大二開始,基本舍友們就開始忙碌了,每天討論以後想去的公司,要不然就開始選學校籌備申研。那時候大家還探討過能不能進大廠這個問題,但我們一致認為競爭太大了,沒有研究生學歷很難進去。想進大廠難,讀研也很難,所以我陷入了深深的糾結。
  • 字節面試也考原題,難度堪比FB
    據已上岸學員爆料,北美字節的多個業務部門都在擴招,可以內推!崗位雖多但競爭激烈,建議大家投遞從速,畢竟越早投機會越大!從之前的多位學員面經來看,字節的面試風格通常都是這樣的👇全職3輪面試,實習2~3輪面試每輪2道算法,難度與FB接近基本都是高頻題,容易碰原題所以,如果想要短期衝刺上岸字節的話,我們應該重點備戰高頻題
  • 這套1307頁的阿里、騰訊等大廠Android面試真題解析火了!
    下面的題目是一個大牛花了很長時間整理的群友在面試阿里、騰訊等網際網路大廠被問到的面試真題和答案解析,如果大家還有其他好的題目或者好的見解歡迎分享。接下來我們看看一線大廠Android中高級面試展開的完整面試題
  • 大廠奇葩OA:不考算法考數學,5~6輪花樣多
    大廠的OA和面試雖難,但也不是無跡可尋,畢竟題庫更新的速度遠遠比不過面試的速度。尤其是亞馬遜,每年都有上萬人應試,題庫早已被摸得透透的了。為了提高面試的門檻,亞麻會在每輪OA和onsite裡加上自己的Behavior Question(BQ),形成了亞馬遜面試的特色。Amazon通常會發三輪OA,其中都包含了BQ。而且基本會圍繞著著名的14 Leadership Principles來展開。此外,OA也考算法,有時還會讓你debug和做邏輯題。
  • 高階測試 · 大廠面試 · 真題題解(7)
    有測友去某知名大廠面試了,遭遇了幾道編程題,帶回來分享給大家研究學習!11.#1、窮盡暴力破解def SearchTarget(lst,t): result = [] lst_len = len(lst) for i in range(lst_len): for j in range(i+1,lst_len): if (lst[i]+lst[j
  • 谷歌關閉headcount、Airbnb停招new grad,今年進不去大廠了?
    我們總結了最近矽谷各大公司的招聘情況,希望能給還未上岸的同學一些參考。LinkedIn/Amazon/Google求職大禮包LinkedIn/Amazon/Google面試真題匯總大廠薪資結構匯總          部分禮包展示,領取方式見文末(文末還有超大驚喜福利,先到先得哦~)
  • 上岸 I Netflix創始人:在家工作(WFH)一無是處
    上岸算法死磕100%上岸率的精品小班課關注我們,第一時間獲得大廠面試真題講解近日
  • 被follow up轟炸暈,我要如何從面試「衰神」逆襲成碼神?
    雖然今年北美招聘受疫情衝擊很大,一些科技公司還是不同程度加大了招人力度,像臉書一擴招就1w。大廠招人需求不減,但僧多粥少,bar還是升了。不少人工作多年沒刷題,算法也丟的差不多了,結果今年突遭layoff,被迫面試直呼:太難了!!
  • 想一個月搞定面試算法?來《九章算法班》!第一節免費試聽!
    想尋找北美software engineer職位的同學。想接受系統的面試算法培訓的同學,或想換工作的但是算法比較薄弱的工程師。0算法基礎即可參與學習。主講令狐衝老師,曾就職於超過2家矽谷頂尖IT企業,  北美和國內頂尖IT企業offer數10+,面試人數超過200人。課程大綱由易到難。只要你會任何一門計算機語言即可參加。尤其適合算法基礎相對薄弱的 or 轉專業的 or 想跳槽卻太久沒刷題的同學。
  • 面試算法實踐與國外大廠習題指南
    時間複雜度:索引: O(n)搜索: O(n)插入: O(1)移除: O(1)StackQueueTreeBinary Tree二叉樹即是每個節點最多包含左子節點與右子節點這兩個節點的樹形數據結構Floyd-Warshall 算法Prim 算法
  • 每天一頓牛排錢,大廠 offer 沒有想像中難
    圓圓老師也開始給我安排算法私教老師重點輔導,約求職指導老師修改我的簡歷,因為是轉行業,自己也沒怎麼花心思,所以簡歷一開始很爛,加菲喵老師真的厲害,改完瞬間就不一樣了!! 就在前兩天,我們聽到了他傳來的好消息,短短一個月時間內先後拿到了Bloomberg, Microsoft,Facebook 的 offer,趕在了 5 月結束之前,成功上岸臉家。
  • 刷算法刷到頭禿,才知道:這些題不考!
    這是該問題的最優解法,卻絕不是面試官想聽到的答案為什麼?因為他自己也不會!開個玩笑,這裡科普一個冷知識:帶人名的算法都不在面試考察範圍內。除了「閱讀全文並背誦」,這種算法考不出什麼東西。大廠面試考察目的,是看你的code寫的好不好,邏輯思維能力怎麼樣,而不是考你的背誦能力。
  • 項目做的夠多就一定能進大廠嗎?——Google上岸經驗分享
    因為覺得大廠的選人標準差不多,所以我加了Justin導師的微信,向他問了很多進大廠的問題。他還拉我進了算法群,和大佬們一起討論題目。後來Justin導師給我推薦了Jonhson導師,說他的項目非常適合我,於是我便跟著Jonhson導師做了人工智慧的項目。在畢業之前,我又報了Justin導師的簡歷課,希望這次把簡歷做的優秀些,畢竟過了第一關才能到後面大顯身手。