2019年9月3日 近期的一些筆試題目

瓜子筆試

填空題

首先,將瓶子的10進制編號數改爲9位的2進制碼。而後,讓第1只老鼠喝全部2進制碼第1位是1的瓶子中的水;讓第2只老鼠喝全部2進制碼第2位是1的瓶子中的水;以此類推下去。這樣,每一個老鼠次日的死活狀況就決定了毒水瓶子二進制碼這一位的數字:老鼠死,對應1,反之爲0。換言之,將9只老鼠死活狀況排成一排。好比說結果是「死活死死活活死死死」的話,毒水瓶子的二進制標籤就是:101100111,轉換成10進制,獲得瓶子的標籤。
若是是12個點,正常的話,能夠組成12*11/2 = 66 條直線,如今是59條,因此是有多點共線的。三點共線少了3-1=2條直線,四點共線少了6-1=5條直線,因此12個點中有三個點共線和四個點共線各一種的狀況。12個點能夠組成的三角形是220種,其中三點共線少了1一種三角形,4點共線少了4種三角形,因此答案是220-1-4=215個。

筆試題

LeetCode41 缺失的第一個正數

思路:解題思路很巧妙。本題的思路是從前日後將數放到它正確的位置上去。python

舉個例子,假設有序列[4,2,6,1,-3],首先看第一個數4,它正確的位置應該是在序列的第4個位置(位置數從1開始,正確的位置是第一個位置放1,第二個位置放2,第三個位置放3……最後咱們只要看哪一個位置放的不是理想的數,那麼它就是第一個缺失的正數)。咱們將4與第4個位置上的「1」進行交換,序列變成[1,2,6,4,-3];接着咱們仍是看第一個數,如今變成了「1」,它的確在它正確的位置,好了,咱們再看第二個數2,也在正確的位置。第三個數6,原本應該放在第6個位置,但是該序列總共就5個位置,因此不移動;第四個數4在它的正確位置,不動;第五個數是負數,不動。最後,從前日後看,發如今第三個位置本該出現的3沒有出現,全部該序列缺失的第一個正數是3。數組

因此概括來講,將每一個數放在它正確的位置,前提是該數是正數,而且該數小於序列長度,而且它正確位置上的那個數不是它,也就是說,把4要放在第4個位置,要保證第4個位置上的數不是4,若是是4的話,交換先後沒什麼變換,把兩個4移來移去,還會形成死循環。spa

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        for i in range(len(nums)):
            while nums[i] > 0 and nums[i]<len(nums) and nums[nums[i]-1] != nums[i]:
                nums[nums[i]-1], nums[i] = nums[i] ,nums[nums[i]-1]
        for i in range(len(nums)):
            if nums[i] != i+1:
                return i+1
        return len(nums)+1
複製代碼

LeetCode 75 顏色分類(荷蘭國旗問題)

咱們將數組分爲四組:紅色,白色,非分類和藍色。最初,咱們將全部元素分組爲非分類。只要白色指針小於藍色指針,咱們就從頭開始迭代。3d

若是白色指針爲紅色(nums [white] == 0),咱們用紅色指針交換並向前移動白色和紅色指針。若是指針是白色的(nums [white] == 1),則元素已經在正確的位置,所以咱們沒必要交換,只需向前移動白色指針。若是白色指針爲藍色,咱們將交換最新的未分類元素。指針

class Solution(object):
    def sortColors(self, nums):
    
        red, white, blue = 0, 0, len(nums) - 1
 
        while white <= blue:
            if nums[white] == 0:
                nums[red], nums[white] = nums[white], nums[red]
                white += 1
                red += 1
            elif nums[white] == 1:
                white += 1
            else:
                nums[white], nums[blue] = nums[blue], nums[white]
                blue -= 1
複製代碼
相關文章
相關標籤/搜索