Leetcode 探索演算法面試題彙總(一)

来源:https://www.cnblogs.com/lyuzt/archive/2019/04/13/10702991.html
-Advertisement-
Play Games

寫在前面:所有題目都是用python寫的,有一些題目懶得重頭寫,直接用python自帶的功能或庫造好的“輪子” 一、開始之前 1、只出現一次的數字 說明: 示例 1: 示例 2: 2、求眾數 示例 1: 示例 2: 3、搜索二維矩陣 II 示例: 現有矩陣 matrix 如下: [ [1, 4, 7 ...


 寫在前面:所有題目都是用python寫的,有一些題目懶得重頭寫,直接用python自帶的功能或庫造好的“輪子”

一、開始之前

1、只出現一次的數字

給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入: [2,2,1]

輸出: 1

示例 2:

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

輸出: 4
def singleNumber(nums):
    tmp = []
    for num in nums:
        if num in tmp:
            tmp.remove(num)
        else:tmp.append(num)
    return tmp[0]

2、求眾數

給定一個大小為 n 的數組,找到其中的眾數。眾數是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。

你可以假設數組是非空的,並且給定的數組總是存在眾數。

示例 1:

輸入: [3,2,3]

輸出: 3

示例 2:

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

輸出: 2
'''
    先將對應的數目存為字典
    找到 values 中最大的值
    再遍歷字典返回 key
'''
def majorityElement(nums):
    dic = {}
    for num in nums:
        dic[num] = dic.get(num, 0) + 1
    max_num = max(dic.values())
    for key in dic.keys():
        if dic[key] == max_num:
            return key

3、搜索二維矩陣 II

編寫一個高效的演算法來搜索 m x n 矩陣 matrix 中的一個目標值 target。該矩陣具有以下特性:

每行的元素從左到右升序排列。
每列的元素從上到下升序排列。

示例:

現有矩陣 matrix 如下:

[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]

給定 target = 5,返回 true。

給定 target = 20,返回 false。

def searchMatrix(matrix, target):
    """
    遞歸,先定位到右上角的數 x
    若 target < x 則往左移一格
    若 target > x 則往下移一格
    註意遞歸的出口
    """
    if matrix == []:
        return False
    m = 0
    n = len(matrix[0]) - 1
    return f(matrix, m, n, target)

def f(matrix, m, n, target):
    if n < 0:
        return False
    if m == len(matrix):
        return False
    if target == matrix[m][n]:
        return True
    if target < matrix[m][n]:
        return f(matrix, m, n-1, target)
    if target > matrix[m][n]:
        return f(matrix, m+1, n, target)
    return False

4、合併兩個有序數組

給定兩個有序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序數組。

說明:

初始化 nums1 和 nums2 的元素數量分別為 m 和 n。

你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素。

示例:

輸入:

nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],     n = 3

輸出: [1,2,2,3,5,6]

# 不想重覆造輪子,簡單粗暴的做法
def merge(nums1, m, nums2, n):
    """
    Do not return anything, modify nums1 in-place instead.
    """
    nums1[m:] = nums2[:n]
    nums1.sort()

5、雞蛋掉落

你將獲得 K 個雞蛋,並可以使用一棟從 1 到 N  共有 N 層樓的建築。

每個蛋的功能都是一樣的,如果一個蛋碎了,你就不能再把它掉下去。

你知道存在樓層 F ,滿足 0 <= F <= N 任何從高於 F 的樓層落下的雞蛋都會碎,從 F 樓層或比它低的樓層落下的雞蛋都不會破。

每次移動,你可以取一個雞蛋(如果你有完整的雞蛋)並把它從任一樓層 X 扔下(滿足 1 <= X <= N)。

你的目標是確切地知道 F 的值是多少。

無論 F 的初始值如何,你確定 F 的值的最小移動次數是多少?

示例 1:

輸入:K = 1, N = 2 輸出:2 解釋: 雞蛋從 1 樓掉落。如果它碎了,我們肯定知道 F = 0 。 否則,雞蛋從 2 樓掉落。如果它碎了,我們肯定知道 F = 1 。 如果它沒碎,那麼我們肯定知道 F = 2 。 因此,在最壞的情況下我們需要移動 2 次以確定 F 是多少。

示例 2:

輸入:K = 2, N = 6 輸出:3

示例 3:

輸入:K = 3, N = 14 輸出:4

''' 這道題對我來說有點難......等我做出來再更新,有懂得小伙伴交流一下,謝謝! '''

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、前言 因為公司項目中用的RabbitMq來做消息處理,自己以前沒有接觸過,所以想自學一下。然額,光安裝就花了6、7個小時才搞定,中間還換過一個版本,綜合國內外博客才最終將所有安裝中遇到的問題解決掉,最終將RabbitMq給運行起來,實屬不易啊。說實話,學習一個新的技術,在安裝軟體時就受阻,對自信 ...
  • 前幾篇準備寫完feign的源碼,這篇直接給出Feign的最佳實踐,考慮到目前網上還沒有一個比較好的實踐解釋,對於新使用spring cloud的同學會對微服務之間的依賴產生一些迷惑,也會走一些彎路。這裡給出目前本人在公司推薦的最佳實踐,供各位參考。 1,服務提供方在Facade層定義好介面信息,包括 ...
  • 繼承: 好處:1、提高代碼復用性; 2、讓類之間產生關係,給多態提供了前提; 父類、子類 Java中支持單繼承,不直接支持多繼承,但對C++的多繼承進行了改良 單繼承:一個子類只能有一個直接復類 多繼承:一個子類可以有多個直接父類(Java中不允許,進行了改良)會產生不確定性,不直接支持,因為父類中 ...
  • 配置環境:python 3.6 python編輯器:pycharm 整理成代碼如下: ...
  • 一、AQS概念 1、隊列同步器是用來構建鎖或者其他同步組件的基礎框架,使用一個int型變數代表同步狀態,通過內置的隊列來完成線程的排隊工作。 2、下麵是JDK8文檔中對於AQS的部分介紹 總結來說就是: ①子類通過繼承AQS並實現其抽象方法來管理同步狀態,對於同步狀態的更改通過提供的getState ...
  • 最近項目需要實現根據關鍵字搜索pdf內容,實現思路就是提取pdf文本,然後進行索引。 工具上選擇: IText 4.16之後採用agpl License,不能用作商用,而且轉換中文會有亂碼問題, pdfsharp 採用MIT License,許可權上沒有問題,但是轉換中文也會有亂碼, 最後決定採用xp ...
  • 最近有很多朋友去目前主流的大型互聯網公司面試(阿裡巴巴、京東、美團、滴滴),面試回來之後會發給我一些面試題。有些朋友輕鬆過關,拿到offer,但是有一些是來詢問我答案的。 其實本來真的沒打算寫這篇文章,主要是自己得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來 ...
  • 1 前言 由於Python的版本眾多,還有Python2和Python3的爭論,因此有些軟體包或第三方庫就容易出現版本不相容的問題。 通過 這個工具,就可以構建一系列 ,然後在每個環境中安裝需要的軟體包(配合 使用),這一系列的環境是相互隔離的。作為一個獨立的環境就不容易出現版本問題,還方便部署。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...