當前位置:首頁 » 操作系統 » 阿里演算法筆試

阿里演算法筆試

發布時間: 2022-10-03 05:27:24

Ⅰ 如果阿里在線筆試的編程題不會做,只做了選擇題有可能過筆試嗎

不可能的,除非你選擇基本不錯

Ⅱ 阿裡面試演算法題合集一

0,1,,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後一個數字。

例如,0、1、2、3、4這5個數字組成一個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。

示例 1:

輸入: n = 5, m = 3
輸出: 3
示例 2:

輸入: n = 10, m = 17
輸出: 2

請實現一個函數,輸入一個整數,輸出該數二進製表示中 1 的個數。例如,把 9 表示成二進制是 1001,有 2 位是 1。因此,如果輸入 9,則該函數輸出 2。

示例 1:

輸入:
輸出:3
解釋:輸入的二進制串 中,共有三位為 '1'。

數字以0123456789101112131415…的格式序列化到一個字元序列中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。

請寫一個函數,求任意第n位對應的數字。

示例 1:

輸入:n = 3
輸出:3
示例 2:

輸入:n = 11
輸出:0

注意這里必須是long 類型

輸入一個非負整數數組,把數組里所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。

示例 1:

輸入: [10,2]
輸出: "102"
示例 2:

輸入: [3,30,34,5,9]
輸出: "3033459"

老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。

你需要按照以下要求,幫助老師給這些孩子分發糖果:

每個孩子至少分配到 1 個糖果。
相鄰的孩子中,評分高的孩子必須獲得更多的糖果。
那麼這樣下來,老師至少需要准備多少顆糖果呢?

示例 1:

輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發 2、1、2 顆糖果。
示例 2:

輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。

在一條環路上有 N 個加油站,其中第 i 個加油站有汽油 gas[i] 升。

你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i+1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發,開始時油箱為空。

如果你可以繞環路行駛一周,則返回出發時加油站的編號,否則返回 -1。

說明:

如果題目有解,該答案即為唯一答案。
輸入數組均為非空數組,且長度相同。
輸入數組中的元素均為非負數。
示例 1:

輸入:
gas = [1,2,3,4,5]
cost = [3,4,5,1,2]

輸出: 3

貪心的思路是,只要總和大於0 就可以繞一圈,
開始位置的貪心思路是,如果從剛開始sum小於0,一定不是從之前開始,而是從當前下一個位置,sum = 0 清空

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

你的目標是使用最少的跳躍次數到達數組的最後一個位置。

示例:

輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達數組的最後一個位置。

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後一個位置。

一條包含字母 A-Z 的消息通過以下方式進行了編碼:

'A' -> 1
'B' -> 2
...
'Z' -> 26
給定一個只包含數字的非空字元串,請計算解碼方法的總數。

示例 1:

輸入: "12"
輸出: 2
解釋: 它可以解碼為 "AB"(1 2)或者 "L"(12)。

這里一定注意 第一個數為0 的情況,s.charAt(0) == '0' 第一個為0 要直接返回0 才行

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

如果你最多隻允許完成一筆交易(即買入和賣出一支股票一次),設計一個演算法來計算你所能獲取的最大利潤。

注意:你不能在買入股票前賣出股票。

示例 1:

輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。
注意利潤不能是 7-1 = 6, 因為賣出價格需要大於買入價格;同時,你不能在買入前賣出股票。

給定三個字元串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。

示例 1:

輸入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
輸出: true

給你一個字元串 s 和一個字元規律 p,請你來實現一個支持 '.' 和 '*' 的正則表達式匹配。

'.' 匹配任意單個字元
'*' 匹配零個或多個前面的那一個元素
所謂匹配,是要涵蓋 整個 字元串 s的,而不是部分字元串。

說明:

s 可能為空,且只包含從 a-z 的小寫字母。
p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。
示例 1:

輸入:
s = "aa"
p = "a"
輸出: false
解釋: "a" 無法匹配 "aa" 整個字元串。

給定一個整數矩陣,找出最長遞增路徑的長度。

對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。

示例 1:

輸入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
輸出: 4
解釋: 最長遞增路徑為 [1, 2, 6, 9]。

使用帶記憶的可以避免超時

使用動態規劃解題

給出一個由無重復的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 (Si,Sj) 都要滿足:Si % Sj = 0 或 Sj % Si = 0。

如果有多個目標子集,返回其中任何一個均可。

示例 1:

輸入: [1,2,3]
輸出: [1,2] (當然, [1,3] 也正確)

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 (w, h) 出現。當另一個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另一個信封里,如同俄羅斯套娃一樣。

請計算最多能有多少個信封能組成一組「俄羅斯套娃」信封(即可以把一個信封放到另一個信封裡面)。

說明:
不允許旋轉信封。

示例:

輸入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
輸出: 3
解釋: 最多信封的個數為 3, 組合為: [2,3] => [5,4] => [6,7]。

標準的動態規劃

一隻青蛙想要過河。 假定河流被等分為 x 個單元格,並且在每一個單元格內都有可能放有一石子(也有可能沒有)。 青蛙可以跳上石頭,但是不可以跳入水中。

給定石子的位置列表(用單元格序號升序表示), 請判定青蛙能否成功過河(即能否在最後一步跳至最後一個石子上)。 開始時, 青蛙默認已站在第一個石子上,並可以假定它第一步只能跳躍一個單位(即只能從單元格1跳至單元格2)。

如果青蛙上一步跳躍了 k 個單位,那麼它接下來的跳躍距離只能選擇為 k - 1、k 或 k + 1個單位。 另請注意,青蛙只能向前方(終點的方向)跳躍。

請注意:

石子的數量 ≥ 2 且 < 1100;
每一個石子的位置序號都是一個非負整數,且其 < 231;
第一個石子的位置永遠是0。
示例 1:

[0,1,3,5,6,8,12,17]

true

使用數組+ 鏈表枚舉所有的可能

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少操作數 。

你可以對一個單詞進行如下三種操作:

插入一個字元
刪除一個字元
替換一個字元

示例 1:

輸入:word1 = "horse", word2 = "ros"
輸出:3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')

給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例 1:

輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:

輸入: coins = [2], amount = 3
輸出: -1

給定一個字元串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。

給定一個字元串 S 和一個字元串 T,計算在 S 的子序列中 T 出現的個數。

一個字元串的一個子序列是指,通過刪除一些(也可以不刪除)字元且不幹擾剩餘字元相對位置所組成的新字元串。(例如,"ACE" 是 "ABCDE" 的一個子序列,而 "AEC" 不是)

題目數據保證答案符合 32 位帶符號整數范圍。

示例 1:

輸入:S = "rabbbit", T = "rabbit"
輸出:3

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入: [10,9,2,5,3,7,101,18]
輸出: 4

使用二分查詢

在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

示例:

輸入:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

輸出: 4

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。

示例 1:

輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你 不觸動警報裝置的情況下 ,一夜之內能夠偷竊到的最高金額。

示例 1:

輸入:[1,2,3,1]
輸出:4

你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第一個房屋和最後一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入: [2,3,2]
輸出: 3

思路是忽略第一個求一個結果,忽略最後一個求一個結果,只要一個時一個結果

// 可以使用rangeCopy 將其放入一個函數中求解

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

相鄰的結點 在這里指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。

例如,給定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

示例:

輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為「Start」 )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為「Finish」)。

現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?

示例 1:

輸入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
輸出: 2

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為「Start」 )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為「Finish」)。

問總共有多少條不同的路徑?

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2

Ⅲ 阿裡面試演算法題合集二

地上有一個m行n列的方格,從坐標 [0,0] 到坐標 [m-1,n-1] 。一個機器人從坐標 [0, 0] 的格子開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行坐標和列坐標的數位之和大於k的格子。例如,當k為18時,機器人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機器人能夠到達多少個格子?

示例 1:

輸入:m = 2, n = 3, k = 1
輸出:3

注意這里求的是機器人走的范圍,而不是路徑,所以每走一個新的格都要加1

從(0,0) 統計所有訪問的點,可以同時進行dfs兩個方向,避免已經訪問過的點,從上向下進行dfs

給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

示例:

board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]

給定 word = "ABCCED", 返回 true

給定一個字元串 s,將 s 分割成一些子串,使每個子串都是迴文串。

返回 s 所有可能的分割方案。

示例:

輸入: "aab"
輸出:
[
["aa","b"],
["a","a","b"]
]

給定一個可包含重復數字的序列,返回所有不重復的全排列。

示例:

輸入: [1,1,2]
輸出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]

數組中有相同的數,可以使用canSwap 進行判斷是否相同

給定一個 沒有重復 數字的序列,返回其所有可能的全排列。

示例:

輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的數字可以無限制重復被選取。

說明:

所有數字(包括 target)都是正整數。
解集不能包含重復的組合。
示例 1:

輸入: candidates = [2,3,6,7], target = 7,
所求解集為:
[
[7],
[2,2,3]
]

給定一個數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的每個數字在每個組合中只能使用一次。

說明:

所有數字(包括目標數)都是正整數。
解集不能包含重復的組合。
示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]

給定一個可能包含重復元素的整數數組 nums,返回該數組所有可能的子集(冪集)。

說明:解集不能包含重復的子集。

示例:

輸入: [1,2,2]
輸出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

/// 子集

給定一組不含重復元素的整數數組 nums,返回該數組所有可能的子集(冪集)。

說明:解集不能包含重復的子集。

示例:

輸入: nums = [1,2,3]
輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

子集就是組合

給定一個非負整數數組,a1, a2, ..., an, 和一個目標數,S。現在你有兩個符號 + 和 -。對於數組中的任意一個整數,你都可以從 + 或 -中選擇一個符號添加在前面。

返回可以使最終數組和為目標數 S 的所有添加符號的方法數。

示例:

輸入:nums: [1, 1, 1, 1, 1], S: 3
輸出:5

java 一道演算法題,阿裡面試的題,我同學給我的,希望有人解答下

  1. HashMap<String, Object> ihp = new LinkedHashMap<String, Object>();

  2. 自定義一個類

    static class MyMap
    {
    List[] lists;
    public MyMap(List... lists)
    {
    this.lists = lists;
    }

    public String toString()
    {
    if (lists == null || lists.length == 0)
    {
    return "{}";
    }
    StringBuilder sb = new StringBuilder();
    sb.append('{');
    int i = 0;
    for (List list: lists)
    {
    sb.append(list);
    i++;
    if (i == lists.length)
    return sb.append('}').toString();
    sb.append(",");
    }
    return "{}";
    }
    }

  3. ihp.put("on1",new MyMap(list2,list1));
    ihp.put("on2",new MyMap(list4,list3));
    ihp.put("on3",new MyMap(list5));
    ihp.put("on4",new MyMap(list6));
    System.out.println(ihp.toString());

    估計有更好的辦法,最開始想到的是List[],發現列印出來是[[xxx,xxx,xxx],[xx,x,x]]這種結構

Ⅳ 大公司筆試面試有哪些經典演算法題目

1、二維數組中的查找

具體例題:如果一個數字序列逆置之後跟原序列是一樣的就稱這樣的數字序列為迴文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是迴文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是迴文序列。現在給出一個數字序列,允許使用一種轉換操作:選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置(只插入一個和)。現在對於所給序列要求出最少需要多少次操作可以將其變成迴文序列?



Ⅵ 求助,阿里實習生筆試考些什麼

阿里實習生筆試考有關計算機知識方面的題目,以下是2014年阿里巴巴筆試的部分內容:
1、設棧S初始狀態為空。元素a,b,c,d,e,f依次通過棧S,若出棧的順序為c,f,e,d,b,a,則棧S的容量至少應該為______ 。
. 3
· 4
· 5
· 6
2、10個相同的糖果,分給三個人,每個人至少要得一個。有 種不同分法。
· 33
· 34
· 35
· 36
3、小數值1.5625的二進製表示是____。
· 101.1001
· 0.001
· 101.111
· 1.1001
4、某二叉樹的先序遍歷是12453,中序遍歷是42513,那麼其後續遍歷是______。
· 45231
· 42351
· 12345
· 54321
阿里巴巴網路技術有限公司(簡稱:阿里巴巴集團)是由曾擔任英語教師的馬雲為首的18人,於1999年在中國杭州創立,他們相信互聯網能夠創造公平的競爭環境,讓小企業通過創新與科技擴展業務,並在參與國內或全球市場競爭時處於更有利的位置。

Ⅶ 昨天去阿裡面試,上來就出了一個演算法題,當時沒想出思路,現在也仍沒有思路,大家來看一下此題。

我覺得這個問題帶有更多的數學成分.
雖然我也不會證明,但是直覺感覺沒有什麼最優構造,也許可以考慮用一下蟻群演算法這類的非精確演算法來求得一個較優解.
----
剛才稍微嘗試了一下,似乎兩個三叉路口(既是你配圖那種結構)都是120°正三叉的情況非常優,正在考慮能不能證明這是最優解.

Ⅷ 阿里巴巴的招聘流程,技術崗位一般幾輪面試

阿里巴巴招聘技術崗位的流程:

依次進行三輪面試:初面、復面、以及hr面。

每通過一輪即可進入下一輪,三輪全過即為通過。

(8)阿里演算法筆試擴展閱讀

面試技巧

招聘中的「經典七問」

招聘過程中常要問到的問題極其釋義總結如下:

以往工作中您的職責是什麼?――如果描述不清,可見即使有相關工作經驗,其系統性全面性也值得懷疑。

請講一下您以往的工作經歷。――考察應聘者的語言組織及表達能力,以及描述的條理化。

您以往的工作經歷中最得意最成功的一件事是什麼?您的長處是什麼?――從應聘者的回答中,可了解他是注重個人成功還是注重團隊協作。

您感覺還有哪方面的知識、技能或能力需要提升?――「提升」一詞比較委婉,一方面考察其態度是否坦誠,另一方面,也為日後的員工培訓增強針對性。

對於新的工作崗位您有什麼設想?如何開展工作?――這涉及到員工的職業生涯設計,更有關員工工作的穩定性。

您離職的原因是什麼?――這是必須要問的問題,涉及員工和組織的融合性。

您對薪金待遇和福利有什麼要求?――這個問題的重要性更是不必多言。

Ⅸ 阿里C++筆試題:const int a = 10;int * p = (int *)(&a);*p=20; 為什麼結果是a=10,*p=20

編譯器優化的結果,編譯器在處理 const int a = 10;
這句時 沒有為a分配內存賦值,而是在加入了符號表,後續引用a時有些類似#define a 10這樣處理了
int * p = (int *)(&a);這句則 配*p被強制賦值,所以指針有效指向了某個地址,所以出現了上述結果

Ⅹ 阿里巴巴演算法工程師筆試題和c++職位有區別嗎

肯定有區別的,演算法工程師考察的多是數據結構,常用演算法(如神經網路等)
而C++主要是一門編程語言

熱點內容
雲伺服器的ip固定的嗎 發布:2025-07-15 19:26:12 瀏覽:934
怎麼建立電腦配置文件 發布:2025-07-15 19:23:57 瀏覽:672
手機導航源碼下載 發布:2025-07-15 19:18:29 瀏覽:499
什麼是原生態安卓機 發布:2025-07-15 19:16:52 瀏覽:686
linux的安裝目錄在哪 發布:2025-07-15 19:10:04 瀏覽:725
2008編程入門經典 發布:2025-07-15 18:58:44 瀏覽:603
艾派密碼是什麼 發布:2025-07-15 18:47:40 瀏覽:588
密碼鎖如何在裡面開門 發布:2025-07-15 18:35:00 瀏覽:521
額溫演算法 發布:2025-07-15 18:18:14 瀏覽:728
ie客戶端事件腳本執行異常 發布:2025-07-15 18:10:13 瀏覽:27