經(jīng)典測(cè)試工程師面試題(三)

經(jīng)典測(cè)試工程師面試題(一)
經(jīng)典測(cè)試工程師面試題(二)

背景

為了擴(kuò)展家里領(lǐng)導(dǎo)的測(cè)試知識(shí)水平和專業(yè)知識(shí)能力提升恃逻,以及為以后更好的面試做基礎(chǔ)攘烛,特意從眾多測(cè)試相關(guān)題型整理出來(lái)同欠,其中的答案僅供參考遏插。

給定一個(gè)已按照升序排列 的有序數(shù)組缸榄,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)忱反。函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值 index1 和 index2泛释,其中 index1 必須小于 index2。

說(shuō)明:
返回的下標(biāo)值(index1 和 index2)不是從零開(kāi)始的温算。
你可以假設(shè)每個(gè)輸入只對(duì)應(yīng)唯一的答案怜校,而且你不可以重復(fù)使用相同的元素。
示例:
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等于目標(biāo)數(shù) 9 注竿。因此 index1 = 1, index2 = 2 茄茁。
## python
class Solution(object):
    def twoSum(self, numbers, target):
        l=0
        r=len(numbers)-1
        while(l<r):
            if(numbers[l]+numbers[r]== target):
                return [l+1,r+1]
            if(numbers[l]+numbers[r] <target):
                l += 1
            else:
                r -= 1

## 測(cè)試用例:
def test_towSum1(self):
    assert towSum([0,1, 1, 2, 3, 6,8], 2) == [1, 4]

def test_towSum2(self):
    assert towSum([1,2,5,6,12], 13) == [1, 5]

def test_towSum3(self):
    assert towSum([2, 7, 11, 15], 9) == [1, 2]
## Java
public int[] twoSum(int[] numbers, int target) {
        int left = 0;
        int right = numbers.length - 1;
        while (left < right) {
            if (numbers[left] + numbers[right] == target) {
                return new int[]{left + 1, right + 1};
            }
            if (numbers[left] + numbers[right] < target) {
                left += 1;
            } else {
                right -= 1;
            }
        }
        return null;
    }

假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂巩割。每次你可以爬 1 或 2 個(gè)臺(tái)階裙顽。你有多少種不同的方法可以爬到樓頂呢?注意:給定 n 是一個(gè)正整數(shù)宣谈。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂愈犹。
1.  1 階 + 1 階
2.  2 階
示例 2:

輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1.  1 階 + 1 階 + 1 階
2.  1 階 + 2 階
3.  2 階 + 1 階
Python
## 不推薦 效率極低 ##
def setpMethod(num):
   if(n == 1 or n == 2):
            return n
    else:
        return self.setpMethod(num-1)+self.setpMethod(num-2)

## 推薦寫(xiě)法 ##
    def climbStairs(self, n):
        if(n == 1 or n == 2):
            return n
        num1=1
        num2=2
        while(n >= 3):
            result = num1 + num2
            num1 = num2
            num2 = result
            n -=1
        return result

## Java ##
public int setpMethod(int n){
        if(n ==1 || n ==2){
        return n;
        }
        int result = 0,n1 = 1,n2 = 2;
        while (n>=3){
            result = n1 + n2;
            n1 = n2;
            n2 = result;
            n--;
        }
        return result;
    }

給定一個(gè)非負(fù)整數(shù)數(shù)組闻丑,你最初位于數(shù)組的第一個(gè)位置漩怎。

數(shù)組中的每個(gè)元素代表你在該位置可以跳躍的最大長(zhǎng)度。判斷你是否能夠到達(dá)最后一個(gè)位置嗦嗡。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 然后跳 3 步到達(dá)最后一個(gè)位置勋锤。
示例 2:

輸入: [3,2,1,0,4]
輸出: false
解釋: 無(wú)論怎樣,你總會(huì)到達(dá)索引為 3 的位置侥祭。但該位置的最大跳躍長(zhǎng)度是 0 叁执, 所以你永遠(yuǎn)不可能到達(dá)最后一個(gè)位置茄厘。
## python ##
class Solution(object):
    def canJump(self, nums):
        need = 1
        if(len(nums) ==1):
            return True
        if(nums[0] == 0):
            return False
        for i in range(len(nums)-2,-1,-1):
            if(nums[i] == 0 or nums[i] < need):
                need += 1
            else:
                need = 1
        if(need == 1) :
            return True
        else:
            return False

## java ##
public boolean canJump(int[] nums) {
        int n = 1;
        if(nums.length ==1){
        return true;
        }
        if(nums[0] == 0){
        return false;
        }
        for(int i=nums.length-2; i>=0; i--){
            if(nums[i] >= n){
                n=1;
            }else{
                n++;
            }
        }
        if(n == 1){
            return true;
        }else{
            return false;
        }
    }

以 Unix 風(fēng)格給出一個(gè)文件的絕對(duì)路徑,你需要簡(jiǎn)化它徒恋〔隙希或者換句話說(shuō)欢伏,將其轉(zhuǎn)換為規(guī)范路徑入挣。

在 Unix 風(fēng)格的文件系統(tǒng)中,一個(gè)點(diǎn)(.)表示當(dāng)前目錄本身硝拧;此外径筏,兩個(gè)點(diǎn) (..) 表示將目錄切換到上一級(jí)(指向父目錄);兩者都可以是復(fù)雜相對(duì)路徑的組成部分障陶。更多信息請(qǐng)參閱:Linux / Unix中的絕對(duì)路徑 vs 相對(duì)路徑

請(qǐng)注意滋恬,返回的規(guī)范路徑必須始終以斜杠 / 開(kāi)頭,并且兩個(gè)目錄名之間必須只有一個(gè)斜杠 /抱究。最后一個(gè)目錄名(如果存在)不能以 / 結(jié)尾恢氯。此外,規(guī)范路徑必須是表示絕對(duì)路徑的最短字符串鼓寺。

示例 1:

輸入:"/home/"
輸出:"/home"
解釋:注意勋拟,最后一個(gè)目錄名后面沒(méi)有斜杠。
示例 2:

輸入:"/../"
輸出:"/"
解釋:從根目錄向上一級(jí)是不可行的妈候,因?yàn)楦悄憧梢缘竭_(dá)的最高級(jí)敢靡。
示例 3:

輸入:"/home//foo/"
輸出:"/home/foo"
解釋:在規(guī)范路徑中,多個(gè)連續(xù)斜杠需要用一個(gè)斜杠替換苦银。
示例 4:

輸入:"/a/./b/../../c/"
輸出:"/c"
示例 5:

輸入:"/a/../../b/../c//.//"
輸出:"/c"
示例 6:

輸入:"/a//b////c/d//././/.."
輸出:"/a/b/c"
##python##
def simplifyPath(self, path):
        """
        :type path: str
        :rtype: str
        """
        paths = path.split('/')
        str = ''
        pathlist = [i for i in paths if I]
        result = []
        for j in range(len(pathlist)):
            print(j)
            if(pathlist[j] == ".."):
                if(result):
                    result.pop()
            elif(pathlist[j] == "."):
                continue
            else :
                result.append(pathlist[j])
        if not result:
            return '/'
        for k in range(len(result)):
            str = str + '/' + result[k]
        return str

給定一個(gè)字符串 (s) 和一個(gè)字符模式 (p) 啸胧,實(shí)現(xiàn)一個(gè)支持 '?' 和 '' 的通配符匹配。'?' 可以匹配任何單個(gè)字符幔虏。'' 可以匹配任意字符串(包括空字符串)纺念。兩個(gè)字符串完全匹配才算匹配成功。

說(shuō)明:
s 可能為空想括,且只包含從 a-z 的小寫(xiě)字母柠辞。
p 可能為空,且只包含從 a-z 的小寫(xiě)字母主胧,以及字符 ? 和 *叭首。
示例 1:

輸入:
s = "aa"
p = "a"
輸出: false
解釋: "a" 無(wú)法匹配 "aa" 整個(gè)字符串。
示例 2:

輸入:
s = "aa"
p = "*"
輸出: true
解釋: '*' 可以匹配任意字符串踪栋。
示例 3:

輸入:
s = "cb"
p = "?a"
輸出: false
解釋: '?' 可以匹配 'c', 但第二個(gè) 'a' 無(wú)法匹配 'b'焙格。
示例 4:

輸入:
s = "adceb"
p = "*a*b"
輸出: true
解釋: 第一個(gè) '*' 可以匹配空字符串, 第二個(gè) '*' 可以匹配字符串 "dce".
示例 5:

輸入:
s = "acdcb"
p = "a*c?b"
輸入: false
##python##
def isMatch(self, s, p):
        si, pi, pj, sj = 0, 0, -1, -1
        while si < len(s):
            if pi < len(p) and p[pi] == '*':
                pi += 1
                pj = pi
                sj = si
            elif pi < len(p) and (p[pi] == '?' or p[pi] == s[si]):
                pi += 1
                si += 1
            elif pj != -1:
                pi = pj
                sj += 1
                si = sj
            else:
                return False
        while (pi < len(p) and p[pi] == '*'):
            pi += 1
        return pi == len(p)
執(zhí)行結(jié)果.png

給出兩個(gè) 非空 的鏈表用來(lái)表示兩個(gè)非負(fù)的整數(shù)。其中夷都,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的眷唉,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。如果,我們將這兩個(gè)數(shù)相加起來(lái)冬阳,則會(huì)返回一個(gè)新的鏈表來(lái)表示它們的和蛤虐。您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開(kāi)頭肝陪。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
## python ##
class Solution(object):
    def addTwoNumbers(self, l1, l2):
        n =l1.val + l2.val
        l3 = ListNode(n%10)
        l3.next = ListNode(n//10)
        p1 = l1.next
        p2 = l2.next
        p3 = l3
        while True:
            if p1 and p2:
                sum = p1.val+ p2.val + p3.next.val
                p3.next.val = sum % 10
                p3.next.next = ListNode(sum//10)
                p1 = p1.next
                p2 = p2.next
                p3 = p3.next
            elif p1 and not p2:
                sum = p1.val + p3.next.val
                p3.next.val = sum %10
                p3.next.next = ListNode(sum // 10)
                p1 = p1.next
                p3 = p3.next
            elif not p1 and p2:
                sum = p2.val +p3.next.val
                p3.next.val = sum % 10
                p3.next.next = ListNode(sum // 10)
                p2 = p2.next
                p3 = p3.next
            else :
                if p3.next.val == 0:
                    p3.next = None
                break
        return l3
執(zhí)行結(jié)果.png

來(lái)源:

以上題目來(lái)源于leetcode-cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驳庭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氯窍,更是在濱河造成了極大的恐慌饲常,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狼讨,死亡現(xiàn)場(chǎng)離奇詭異贝淤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)政供,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門播聪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人布隔,你說(shuō)我怎么就攤上這事离陶。” “怎么了执泰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵枕磁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我术吝,道長(zhǎng)计济,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任排苍,我火速辦了婚禮沦寂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淘衙。我一直安慰自己传藏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布彤守。 她就那樣靜靜地躺著毯侦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪具垫。 梳的紋絲不亂的頭發(fā)上侈离,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音筝蚕,去河邊找鬼卦碾。 笑死铺坞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洲胖。 我是一名探鬼主播济榨,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绿映!你這毒婦竟也來(lái)了擒滑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绘梦,失蹤者是張志新(化名)和其女友劉穎橘忱,沒(méi)想到半個(gè)月后赴魁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卸奉,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年颖御,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榄棵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潘拱,死狀恐怖疹鳄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芦岂,我是刑警寧澤瘪弓,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站禽最,受9級(jí)特大地震影響腺怯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜川无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一呛占、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懦趋,春花似錦晾虑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诫咱,卻和暖如春笙隙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遂跟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工逃沿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婴渡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓凯亮,卻偏偏與公主長(zhǎng)得像边臼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子假消,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容