LeetCode簡單題 - 學習

力扣題庫 - 簡單題 - 僅記錄學習

來源地址:?力扣 (LeetCode) 全球極客摯愛的技術成長平臺

1. 兩數之和

給定一個整數數組 nums?和一個整數目標值 target,請你在該數組中找出 和為目標值 target? 的那?兩個?整數,并返回它們的數組下標。

你可以假設每種輸入只會對應一個答案,并且你不能使用兩次相同的元素。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 題解 1# for num in range(len(nums)):#     other = target - nums[num]#     if other in nums[num+1:]:#         return [num,nums[num+1:].index(other)+1+num]# 題解 2dict_val = {}for index,val in enumerate(nums):if target - val in dict_val:return [index,dict_val[target - val]]dict_val[val]=index

14. 最長公共前綴

編寫一個函數來查找字符串數組中的最長公共前綴。

如果不存在公共前綴,返回空字符串?""。

示例 1:

輸入:strs = ["flower","flow","flight"]

輸出:"fl"

示例 2:

輸入:strs = ["dog","racecar","car"]

輸出:""

解釋:輸入不存在公共前綴。

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:data = ""for i in list(zip(*strs)):if len(set(i))  == 1:data +=i[0]else:breakreturn data

提示: zip(*strs)

strs = ['flower','floo','wwsds']

print(list(zip(*strs)))

# [('f', 'f', 'w'), ('l', 'l', 'w'), ('o', 'o', 's'), ('w', 'o', 'd')]

20. 有效的括號

給定一個只包括 '(',')','{','}','[',']'?的字符串 s ,判斷字符串是否有效。

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。

  2. 左括號必須以正確的順序閉合。

  3. 每個右括號都有一個對應的相同類型的左括號。

示例 1:

輸入:s = "()"

輸出:true

示例 2:

輸入:s = "()[]{}"

輸出:true

class Solution:def isValid(self, s: str) -> bool:elist = ['?']dic = {'{': '}',  '[': ']', '(': ')', '?': '?'}for val  in list(s):if val in dic:elist.append(val)else:if dic[elist.pop()] !=val:return Falsereturn len(elist) == 1
27. 移除元素

給你一個數組 nums?和一個值 val,你需要 原地 移除所有數值等于?val?的元素。元素的順序可能發生改變。然后返回?nums?中與?val?不同的元素的數量。

假設 nums 中不等于 val 的元素數量為 k,要通過此題,您需要執行以下操作:

  • 更改 nums 數組,使 nums 的前 k 個元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。

  • 返回 k。

class Solution:def removeElement(self, nums: List[int], val: int) -> int:for num in range(nums.count(val)):nums.remove(val)return len(nums)

35. 搜索插入位置

給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。

請必須使用時間復雜度為 O(log n) 的算法。

示例 1:

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

示例?2:

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

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:# 二分查找方法if target not in nums:l,r=0,len(nums)-1while l<=r:mid = (l+r)//2if nums[mid]<target:l=mid+1else:r=mid-1return lreturn nums.index(target)

88. 合并兩個有序數組

給你兩個按 非遞減順序 排列的整數數組?nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。

請你 合并 nums2 到 nums1 中,使合并后的數組同樣按 非遞減順序 排列。

注意:最終,合并后數組不應由函數返回,而是存儲在數組 nums1 中。為了應對這種情況,nums1 的初始長度為 m + n,其中前 m 個元素表示應合并的元素,后 n 個元素為 0 ,應忽略。nums2 的長度為 n 。

示例 1:

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

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

解釋:需要合并 [1,2,3] 和 [2,5,6] 。合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。

class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""# 方法1: 直接合并后排序# nums1[m:]=nums2# nums1.sort()# 方法二: 我們為兩個數組分別設置一個指針 p1? 與 p2? 來作為隊列的頭部指針elist=[]p1,p2=0,0while p1<m or p2<n:if p1==m:elist.append(nums2[p2])p2+=1elif p2==n:elist.append(nums1[p1])p1+=1elif nums1[p1]<nums2[p2]:elist.append(nums1[p1])p1+=1else:elist.append(nums2[p2])p2+=1nums1[:]=elist

121. 買賣股票的最佳時機

給定一個數組 prices ,它的第?i 個元素?prices[i] 表示一支給定股票第 i 天的價格。

你只能選擇 某一天 買入這只股票,并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。

返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回 0 。

示例 1:

輸入:[7,1,5,3,6,4]

輸出:5

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

class Solution:def maxProfit(self, prices: List[int]) -> int:cost,profit= float('inf'),0for p in prices:cost=min(cost,p)profit = max(profit,p-cost)return profit

205. 同構字符串

給定兩個字符串?s?和?t?,判斷它們是否是同構的。

如果?s?中的字符可以按某種映射關系替換得到?t?,那么這兩個字符串是同構的。

每個出現的字符都應當映射到另一個字符,同時不改變字符的順序。不同字符不能映射到同一個字符上,相同字符只能映射到同一個字符上,字符可以映射到自己本身。

示例 1:

輸入:s = "egg", t = "add"

輸出:true

class Solution:def isIsomorphic(self, s: str, t: str) -> bool:# 方法1-索引標記for i in range(len(s)):if s.index(s[i]) != t.index(t[i]):return Falsereturn True

219. 存在重復元素 II

給你一個整數數組?nums 和一個整數?k ,判斷數組中是否存在兩個 不同的索引?i?和?j ,滿足 nums[i] == nums[j] 且 abs(i - j) 。如果存在,返回 true ;否則,返回 false 。

示例?1:

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

示例 2:

輸入:nums = [1,0,1,1], k = 1? 輸出:true

示例 3:

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

class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:pos = {}# 方法一:哈希表for i, num in enumerate(nums):if num in pos and i - pos[num] <= k:return Truepos[num] = ireturn False
228. 匯總區間

給定一個 ?無重復元素 的?有序 整數數組 nums 。

區間 [a,b] 是從 a 到 b(包含)的所有整數的集合。

返回 恰好覆蓋數組中所有數字最小有序 區間范圍列表?。也就是說,nums 的每個元素都恰好被

某個區間范圍所覆蓋,并且不存在屬于某個區間但不屬于 nums 的數字 x 。

列表中的每個區間范圍 [a,b] 應該按如下格式輸出:

  • "a->b" ,如果 a != b

  • "a" ,如果 a == b

示例 1:

輸入:nums = [0,1,2,4,5,7]

輸出:["0->2","4->5","7"]

解釋:區間范圍是:[0,2] --> "0->2"[4,5] --> "4->5"[7,7] --> "7"

class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:def fe(i:int,j:int):return str(nums[i]) if i==j else f'{nums[i]}->{nums[j]}'res = []i=0while i<len(nums):f=iwhile f+1<len(nums) and nums[f+1]== nums[f]+1:f+=1res.append(fe(i,f))i=f+1return res

258. 各位相加

給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數。返回這個結果。

示例 1:

輸入: num = 38

輸出: 2

解釋: 各位相加的過程為: 38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2??由于 2 是一位數,所以返回 2。

class Solution:def addDigits(self, num: int) -> int:# 最直觀的方法是模擬各位相加的過程,直到剩下的數字是一位數。while num >= 10:sum = 0while num:sum += num % 10num //= 10num = sumreturn num

290. 單詞規律

給定一種規律 pattern?和一個字符串?s?,判斷 s?是否遵循相同的規律。

這里的?遵循?指完全匹配,例如,?pattern?里的每個字母和字符串?s?中的每個非空單詞之間存在著雙向連接的對應規律。

示例1:

輸入: pattern = "abba", s = "dog cat cat dog"

輸出: true

class Solution:def wordPattern(self, pattern: str, s: str) -> bool:# 判斷字符與字符串之間是否恰好一一對應。即任意一個字符都對應著唯一的字符串,任意一個字符串也只被唯一的一個字符對應。在集合論中,這種關系被稱為「雙射」。word_list=s.split()if len(word_list)!=len(pattern):return Falsemp1,mp2={},{}for a,b in zip(pattern,word_list):if a in mp1 and mp1[a]!=b or b in mp2 and mp2[b]!=a:return Falsemp1[a]=bmp2[b]=areturn True

383. 贖金信

給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構成。

如果可以,返回 true ;否則返回 false 。

magazine 中的每個字符只能在 ransomNote 中使用一次。

示例 1:

輸入:ransomNote = "a", magazine = "b"? 輸出:false

示例 2:

輸入:ransomNote = "aa", magazine = "ab"? 輸出:false

from collections import Counter
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:# 方法1  Counter 用法  cnt = Counter("aab")  # Counter({'a': 2, 'b': 1})# cnt = Counter(magazine) # # Counter({'d': 3, 'b': 2, 'c': 2, 'a': 1})# for c in ransomNote:#     cnt[c]-=1#     if cnt[c]<0:#         return False# return True# 方法2: 字符遍歷m,n=list(magazine),list(ransomNote)for i in range(len(m)):if m[i] in n:n.remove(m[i])if len(n)==0:return Trueelse:return False

392. 判斷子序列

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。

字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。

示例 1:

輸入:s = "abc", t = "ahbgdc"

輸出:true

class Solution:def isSubsequence(self, s: str, t: str) -> bool:# 方法一:雙指針n, m = len(s), len(t)i = j = 0while i < n and j < m:if s[i] == t[j]:i += 1j += 1return i == n

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918312.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918312.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Camera 打開和拍照APK源碼

完整下載路徑: 【免費】AndroidcameraAPK完整源碼(包括打開攝像頭和拍照保存功能)Android10驗證可完整運行資源-CSDN下載 效果: 源碼: package com.example.mycamera;import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appco…

【系統分析師】軟件需求工程——第11章學習筆記(上)

軟件需求工程是包括創建和維護軟件需求文檔所必需的一切活動的過程。可分為兩大工作&#xff1a;需求開發需求獲取需求分析需求定義&#xff08;編寫需求規格說明書&#xff09;需求驗證需求管理定義需求基線處理需求變更需求跟蹤在需求開發階段需要確定軟件所期望的用戶類型&a…

機器學習第七課之支持向量機SVM

目錄 簡介&#xff1a; 一、什么是支持向量機 二、如何選取最佳的超平面 1.超平面方程 (優化目標) 2.如何尋找最優的超平面 3.舉例分析 4.軟間隔?編輯 三、核函數 1舉例 2常用核函數 3.多項式核函數 4.高斯核函數: 四、svm的優缺點 五、支持向量機的API 六、案例…

P3232 [HNOI2013] 游走,solution

原題&#xff1a; link&#xff0c;點擊這里喵。 題意&#xff1a; 給定一個 nnn 個點 mmm 條邊的無向連通圖&#xff0c;圖無重邊和自環&#xff0c;頂點從 111 編號到 nnn&#xff0c;邊從 111 編號到 mmm。 小 Z 在該圖上進行隨機游走&#xff0c;初始時小 Z 在 111 號頂…

Docker容器部署discuz論壇與線上商城

準備 關閉防火墻&#xff0c;上下文[rootdocker ~]# systemctl disable --now firewalld[rootdocker ~]# setenforce 0下載應用yum remove runc -y ### rocky8才需要yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cento…

Linux入門指南:26個基礎命令全解析

目錄 一.基礎概念與入門 1.Linux操作系統簡介 2.終端與shell的基本概念 3.命令行界面的優勢 二.基礎指令 1.whoami ?2.useradd/userdel/passwd ?3.pwd ?4.ls ?5.cd 6.touch 7.mkdir 8.tree 9.rmdir/rm 10.man 11.cp 12.mv 13.cat 14.le…

【后端】Java 8 特性 `User::getId` 語法(方法引用)介紹

文章目錄核心概念解析&#xff1a;方法引用的四種類型&#xff1a;關鍵特性&#xff1a;使用場景推薦&#xff1a;何時避免使用&#xff1a;性能說明&#xff1a;在 Java 中&#xff0c; User::getId 是一種稱為 方法引用&#xff08;Method Reference&#xff09; 的語法糖&a…

基于BP與CNN的圖像分類模型構建、超參數優化及性能對比研究?

一、實驗目的實驗目標構建基于神經網絡模型的數據分析與模式識別框架&#xff0c;探明神經網絡在大數據分析中的意義。實驗任務構建基于深度 BP 神經網絡與卷積神經網絡的數據分析與模式識別框架&#xff0c;將數據集 MNIST 與 CIFAR-10 分別在兩種模型中訓練&#xff0c;并比較…

HarmonyOS應用開發-低代碼開發登錄頁面(超詳細)

本篇文章我來手把手教大家做一個HarmonyOS 應用的登錄頁面&#xff0c;逐步講解&#xff0c;非常細致&#xff0c;百分百能學會&#xff0c;并提供全部源碼。頁面使用 DevEco Studio 的低代碼開發。 通過本文的實踐經驗&#xff0c;我想告訴大家&#xff0c; HarmonyOS 應用開發…

AJAX與axios框架

文章目錄前言案例跨域訪問總結?前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 通過 ajax 進行前后端交互 案例 此項目用到了javaweb知識 首先創建JavaWeb項目編寫代碼&#xff1a; package ajax;import java.io.IOException; import java.util.Arr…

智能創造的幕后推手:AIGC浪潮下看AI訓練師如何塑造智能未來

文章目錄一、AIGC時代的算法與模型訓練概覽二、算法與模型訓練的關鍵環節三、AI訓練師的角色與職責四、AI訓練師的專業技能與素養五、AIGC算法與模型訓練的未來展望《AI訓練師手冊&#xff1a;算法與模型訓練從入門到精通》亮點內容簡介作者簡介谷建陽目錄《醫學統計學從入門到…

Python設計模式 - 裝飾模式

定義 裝飾模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;用于在不修改原有類的情況下動態地擴展對象的功能。 結構抽象組件&#xff08;Component&#xff09;&#xff1a;定義對象的公共接口&#xff0c;使得客戶端能以一致的方式處理未被裝…

MySQL(188)如何使用MySQL的慢查詢工具?

使用MySQL的慢查詢工具可以幫助開發者識別和優化性能不佳的SQL查詢。以下是詳細深入的步驟和代碼示例&#xff0c;幫助你使用MySQL的慢查詢工具來進行查詢分析和優化。 一、啟用慢查詢日志 首先&#xff0c;你需要確保MySQL的慢查詢日志功能是啟用的。慢查詢日志記錄了所有執行…

如何培養自己工程化的能力(python項目)

培養 Python 項目的工程化能力需要系統性訓練&#xff0c;以下從基礎到高階的實踐路徑&#xff0c;結合具體案例和工具鏈&#xff0c;幫助你逐步進階&#xff1a;一、夯實工程化基礎能力?1. 規范代碼與項目結構??項目模板化?使用 cookiecutter生成標準項目結構&#xff0c;…

AI編程插件對比分析:CodeRider、GitHub Copilot及其他

AI編程插件對比分析:CodeRider、GitHub Copilot及其他 隨著人工智能技術的快速發展,AI編程插件已成為提升開發者生產力的重要工具。CodeRider和GitHub Copilot作為市場上的領先者,分別以其獨特的特性和生態系統吸引了大量開發者。本文將從功能特性、性能表現、集成性、用戶…

uniapp/uniappx實現圖片或視頻文件選擇時同步告知權限申請目的解決華為等應用市場上架審核問題

在UNIAPP支持vue和nvue,在UNIAPPX支持uvue&#xff0c;安卓支持在選擇圖片或視頻文件權限申請的時候自動同步告知權限申請目的。輕松解決在華為應用市場審核&#xff0c;要求告知權限申請目的或說明的問題。 UNIAPP相冊圖片視頻選擇器(安卓可以自定義界面樣式)功能介紹&#x…

jupyter notebook如何打開其他盤目錄

問題描述Jupyter Notebook 相信是我們學習 Python 避不開的一個工具。當我們使用 pip install notebook 安裝 Notebook 之后&#xff0c;使用命令 jupyter notebook 啟動服務&#xff0c;啟動之后默認會在瀏覽器打開界面。我們會發現&#xff0c;這個界面默認在 C 盤下&#xf…

C語言深度剖析

一、關鍵字 1.1 最快的關鍵字-register register 這個關鍵字請求編譯器盡可能將變量存在CPU內部寄存器中,而不是通過內存尋址以提高效率。 注意是:盡可能、而不是絕對 1.1.1 皇帝身邊的小太監-寄存器 不知道什么是寄存器,那見過太監沒有其實寄存器就是相當于。一個cpu的…

電腦使用“碎片整理”程序的作用

1.解決文件碎片化問題碎片整理的作用&#xff1a;將這些分散的文件片段重新整理、拼接&#xff0c;使其連續存儲在硬盤的某個區域&#xff0c;減少文件的 “碎片化” 程度。2. 提升硬盤讀寫速度機械硬盤的特殊性&#xff1a;機械硬盤依賴磁頭的物理移動來讀取數據&#xff0c;若…

AI 軟件工程開發 AI 算法 架構與業務

AI 軟件工程開發 & AI 算法 & 架構與業務前言1.AI 軟件工程開發1.1. AI Developer Studio &#xff08;playground級&#xff09;1.2. Agent & RAG1.3. LangChain & LangGraph1.4. MCP, Model Context Protocol1.5. Ollama1.6. Coze & Dify2.AI 算法2.1. G…