242. 有效的字母異位詞| 349. 兩個數組的交集

242. 有效的字母異位詞

?nums = [0]*26?:

這行代碼創建了一個包含26個0的列表,這個列表通常用于計數或者作為某種映射的基礎,比如統計字符串中每個字母出現的次數(假設只考慮小寫字母a-z)。

ord()

Python 中的一個內置函數,用于獲取單個字符(Unicode 字符)的整數表示(即字符的 Unicode 碼點)。這個函數非常有用,因為它允許你將字符與其在計算機內部存儲的數值表示形式相互轉換。

ord(c):c?是一個長度為 1 的字符串,即一個字符

# 獲取字符 'A' 的 Unicode 碼點  
print(ord('A'))  # 輸出: 65  # 獲取數字字符 '5' 的 Unicode 碼點  
print(ord('5'))  # 輸出: 53  # 嘗試獲取多字符字符串的 Unicode 碼點,將拋出 TypeError  
# print(ord('AB'))  # TypeError: ord() expected a character, but string of length 2 found  # 嘗試獲取非字符字符串(如空字符串)的 Unicode 碼點,也將拋出 TypeError  
# print(ord(''))  # TypeError: ord() expected a character, but string of length 0 found

注意事項

  • ord()?函數僅適用于單個字符的字符串。
  • 字符的 Unicode 碼點可以用來在程序中進行各種操作,比如字符編碼轉換、字符比較等。
  • 當你需要將一個整數轉換回對應的字符時,可以使用內置的?chr()?函數。

python 代碼:

class Solution:def isAnagram(self, s: str, t: str) -> bool:nums = [0]*26for i in s:nums[ord(i)-ord('a')] += 1for i in t:nums[ord(i)-ord('a')] -= 1for i in nums:if i != 0:return Falsereturn True

349. 兩個數組的交集

當數組中的數值沒有小于1000這個限制的時候,這道題傾向于用set來求解。加了這個限制之后,這道題目用數組來求解,用哈希表的結構是比較合適的。當我們遇到哈希表的題目的時候,要判斷什么時候用數組?什么時候用set?什么時候用map?

這里我們默認他沒有加上數組的限制。也就是其中的Int可能非常大。可能是上千或上億。當這里面的數值非常大的時候,我們想用數組來做映射就不合適了。因為數組下標放不了那么大的數。同時也非常浪費儲存空間。

這道題為什么會想到用哈希表來解決?哈希表適合用于解決什么樣的題目?哈希表最擅長于解決,給你一個集合,判斷元素是否有在這個集合里出現過。類似這種場景第一個要想到用哈希表。具體用數組還是用set還是用map?要具體分析。如果這個數值很大的話就不適合用數組。還有一種情況是數值可能不是很大,但是分布的很分散。如0,100萬,如果用數組來做映射的話,要用100萬那么大的數組,但實際運用的只有三個。這種情況下用set也是比較合適的。

本題是求兩個數組的交集。可以將其中一個數組轉化為哈希表。然后再去遍歷第二個數組,檢查元素是否在哈希表里面出現過。如果出現過,我們就將它放在result集合里面,并且這個集合是去重的。

在c加加里面有三個set結構:

以下是幾個與集合相關的常用C++ STL(標準模板庫)容器:

  1. std::set

    std::set?是一個基于紅黑樹(一種自平衡二叉查找樹)實現的集合容器。它存儲的元素是唯一的,且按照一定的順序(默認情況下是升序,但可以通過自定義比較函數來改變)進行存儲。std::set主要提供了插入、刪除和查找元素的操作,這些操作在平均和最壞情況下都具有對數時間復雜度。

  2. std::multiset

    std::set類似,std::multiset也是基于紅黑樹實現的,但它允許存儲重復的元素。這意味著同一個值可以在std::multiset中出現多次。std::multiset提供的接口和操作與std::set類似,但考慮到它允許重復元素,其行為在某些方面會有所不同(比如插入重復元素時,會成功添加而不是失敗)。

  3. std::unordered_set

    std::setstd::multiset不同,std::unordered_set是基于哈希表實現的,因此它不保證元素的順序。然而,由于哈希表的性質,它在平均情況下的插入、刪除和查找操作都具有常數時間復雜度(盡管在最壞情況下可能會退化到線性時間復雜度,但這通常不會發生)。std::unordered_set同樣要求存儲的元素是唯一的。

需要注意的是,雖然這里沒有直接提到“三個set結構”的固定術語,但std::setstd::multisetstd::unordered_set是C++ STL中與集合操作最相關的三種數據結構。它們各自的特點和用途使得開發者可以根據具體需求選擇最適合的數據結構。

std::setstd::multiset底層實現都是紅黑樹。std::unordered_set底層實現是哈希值的方式。是哈希值直接映射,可以理解為是一個可以無限存儲的數組。這里選擇unordered_set,因為他做映射的時候效率是最高的。做取值操作的時候效率也是最高的。因為另外兩個底層是樹,取值的時候還有一個查找的操作。

set解決:unordered_set = result
因為unordered_set 可以進行去重操作,從這里也可以看出來,我們在解題的時候選擇一個合適的數據結構非常重要。
unordered_set = number_set(nums1)
這里直接將nums1進行初始化。將nums1轉化為unordered_set ;接下來這里對nums2進行一個查詢操作。for(i = 0;i<nums2.size;i++){
遍歷的過程首先是判斷這個元素在unordered_set 里面有沒有出現過。if (number_set.find(nums2[i] != number_set.end()){
在這段C++代碼中,number_set.find(nums2[i]) 返回一個迭代器,指向找到的元素(如果找到的話),或者如果沒有找到,則返回 end() 迭代器。然后,我們通過比較這個迭代器是否不等于 end() 迭代器來檢查元素是否存在。result.insert(nums2[i])
}return vector(result)數組解決:
我們定義一個數組,比給定的范圍大一點就行了。
int hash[1005] = {0}
unordered_set = result
還是剛才的處理邏輯,首先將nums1處理成哈希表的結構。for(i = 0;i<nums1.size;i++){hash[nums1[i]] = 1;哈希數組下標所對應的值賦值為一,這樣我們這個哈希數組就記錄了nums1數組中的所有元素。所有出現過的元素在我數組的下標所對應的值都是一。這樣就將數組nums1中所有元素進行記錄了。
}接下來是判斷nums2for(i = 0;i<nums2.size;i++){if (hash[nums2[i] == 1]){如果這個值等于一,說明他在哈希表里出現過。result.insert[num2[i];這樣就將nums1出現過的元素,在num2中間儲存起來了。并且進行了去重的操作
}
}
return vector(result)其實這道題用數組來做效率會更高一些,因為用set的話每往里面添加一個值,進行一個insert的操作,要對值進行一個哈希運算。然后轉變成他內部存儲的值,然后還要去新開辟一個內存空間。用數組的話直接用下標進行哈映射是最快的。

Python代碼(set方法):

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:return list(set(nums1) & set(nums2))#使用 & 操作符或 intersection() 方法可以取交集
set1 = {1, 2, 3}  
set2 = {2, 3, 4}  
# 使用 & 操作符  
intersection = set1 & set2  # {2, 3}  
# 使用 intersection() 方法  
intersection_method = set1.intersection(set2)  # {2, 3}

Python里面set的操作:

1. 交集(Intersection)
  • 使用?&?操作符或?intersection()?方法:
  • set1 = {1, 2, 3}  
    set2 = {2, 3, 4}  
    # 使用 & 操作符  
    intersection = set1 & set2  # {2, 3}  
    # 使用 intersection() 方法  
    intersection_method = set1.intersection(set2)  # {2, 3}
2. 并集(Union)
  • 使用?|?操作符或?union()?方法:
  • union = set1 | set2  # {1, 2, 3, 4}  
    union_method = set1.union(set2)  # {1, 2, 3, 4}
3. 差集(Difference)
  • 使用?-?操作符或?difference()?方法:
  • difference = set1 - set2  # {1}  
    difference_method = set1.difference(set2)  # {1}
4. 對稱差集(Symmetric Difference)
  • 使用?^?操作符或?symmetric_difference()?方法:
  • symmetric_difference = set1 ^ set2  # {1, 4}  
    symmetric_difference_method = set1.symmetric_difference(set2)  # {1, 4}
5. 添加元素
  • 使用?add()?方法:
  • my_set.add(4)  # 現在 my_set 是 {1, 2, 3, 4}

6. 移除元素
  • 使用?remove()?方法(如果元素不存在會拋出異常):
    my_set.remove(2)  # 現在 my_set 是 {1, 3, 4}
  • ?使用?discard()?方法(如果元素不存在不會拋出異常):
    my_set.discard(5) # my_set 仍然是 {1, 3, 4}
  • 使用?pop()?方法(移除并返回集合中的一個元素,如果集合為空則拋出異常):
    removed_element = my_set.pop()  # 移除并返回集合中的一個元素
7. 判斷元素是否存在
  • 使用?in?關鍵字:
    if 3 in my_set:  print("3 exists in the set")

8. 集合的長度
  • 使用?len()?函數:
    print(len(my_set))  # 輸出集合中元素的數量

9. 轉換為列表
  • 使用?list()?函數:
    list_from_set = list(my_set)  # 將集合轉換為列表

Python (字典和集合):

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:table = {}for num in nums1:table[num] = table.get(num,0) + 1res= set()for num in nums2:if num in table:res.add(num)del table[num]return list(res)

del table[num]:

在Python中,del table[num]這行代碼的作用是刪除字典(如果table是一個字典)或者列表(如果table是一個列表)中索引或鍵為num的元素。不過,重要的是要理解這兩種數據結構之間的差異以及如何使用它們。

如果table是一個列表(List)

在列表中,num應該是一個整數索引,它指定了要刪除的元素的位置。例如:

table = [1, 2, 3, 4, 5]  
num = 2  
del table[num]  # 刪除索引為2的元素,即數字3  
print(table)  # 輸出: [1, 2, 4, 5]
如果table是一個字典(Dictionary)

在字典中,num應該是一個字符串或不可變類型(如整數、浮點數等,但在實際使用中字符串作為鍵更為常見),它指定了要刪除的鍵值對的鍵。例如:

table = {'a': 1, 'b': 2, 'c': 3}  
num = 'b'  
del table[num]  # 刪除鍵為'b'的鍵值對  
print(table)  # 輸出: {'a': 1, 'c': 3}
注意點
  • 如果num的索引或鍵在table中不存在,使用del table[num]將會拋出一個KeyError(對于字典)或IndexError(對于列表)異常。

  • 在處理列表或字典時,如果不確定索引或鍵是否存在,可以先使用in關鍵字進行檢查,例如:

    if num in table:  del table[num]  
    else:  print(f"The key {num} does not exist in the table.")
  • 字典的鍵是唯一的,而列表的索引是基于位置的,這意呀著你可以有重復的列表項,但每個列表項的索引都是唯一的。在字典中,你不能有重復的鍵。

python(數組方法):

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:count1 = [0]*1001count2 = [0]*1001res = []for i in range(len(nums1)):count1[nums1[i]] += 1for i in range(len(nums2)):count2[nums2[i]] += 1for i in range(1001):if count1[i]*count2[i] > 0:res.append(i)return res

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

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

相關文章

HTML第二課:塊級元素

HTML第二課&#xff1a;塊級元素塊級元素塊級元素 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta http-equiv"Content-…

微論-突觸的作用賦能思考(可能是下一代人工智能架構的啟發式理論)

突觸智能&#xff1a;微觀結構與宏觀智慧的橋梁摘要&#xff1a;傳統人工智能模型&#xff0c;尤其是深度學習&#xff0c;將突觸簡單抽象為一個靜態的權重參數&#xff0c;這極大地簡化了生物計算的復雜性。本文受啟發于生物突觸的微觀功能&#xff0c;提出了一種新的智能架構…

ARM - GPIO 標準庫開發

一、STM32MP157AAA開發板套件介紹1.1 核心板 - 主板如圖所示&#xff1a;主板各部分介紹1.2 IO 拓展板如圖所示&#xff1a;IO拓展板各部分介紹開發板名稱&#xff08;硬件平臺&#xff09;&#xff1a;FS-MP1A主控制器&#xff1a;STM32MP157AAA3 Cortex-A7 * 2 Cortex-M4 -…

橙武低代碼:不僅僅是云SaaS,更是云端開發+本地部署的新范式

版權歸作者所有&#xff0c;轉載請注明出處。 一、低代碼的時代背景 在過去十年里&#xff0c;軟件研發模式經歷了巨大的演變。從傳統的瀑布開發&#xff0c;到敏捷、DevOps&#xff0c;再到如今的低代碼/無代碼平臺&#xff0c;研發效率和交付模式發生了根本性變化。低代碼的…

神經語言學視角:腦科學與NLP深層分析技術的交叉融合

引言&#xff1a;從“統計擬合”到“類人理解”——NLP的下一個范式近年來&#xff0c;以Transformer架構為核心的大型語言模型&#xff08;LLM&#xff09;在自然語言處理&#xff08;NLP&#xff09;領域取得了前所未有的成功 。它們能夠生成流暢的文本、回答復雜的問題&…

Coze源碼分析-工作空間-項目查詢-前端源碼

前言 本文將深入分析Coze Studio項目中用戶登錄后進入工作空間查看和管理項目的前端實現&#xff0c;通過源碼解讀來理解工作空間項目開發功能的架構設計和技術實現。Coze Studio采用了現代化的React TypeScript技術棧&#xff0c;結合微前端架構和模塊化設計&#xff0c;為用…

【系統架構師設計(9)】系統設計:結構化設計與面向對象設計

文章目錄一、核心思想&#xff1a;模塊化與對象化的設計哲學1、結構化設計的核心思想2、面向對象設計的核心思想3、兩種設計方法的本質區別二、結構化設計知識點1、設計階段2、設計原則3、 內聚類型&#xff08;從低到高&#xff09;耦合類型&#xff08;從低到高&#xff09;模…

還在從零開發AI應用?這個項目直接給你500個現成方案!!!

大家好&#xff0c;我是顧北&#xff0c;一名AI應用探索者&#xff0c;也是GitHub開源項目收集者。昨晚又在GitHub上瞎逛...咦&#xff0c;碰到了一個特別有意思的項目。說實話吧&#xff0c;作為一個天天折騰AI工具的人&#xff0c;見過的項目沒有一千也有八百了&#xff0c;但…

react+taro的使用整理

前言&#xff1a; 本文主要整理下我們跨段工具taro的具體使用方法與相關資料。 taro官網&#xff1a; 安裝及使用 | Taro 文檔 安裝&#xff1a; 全局腳手架安裝&#xff1a; npm install -g tarojs/cli 使用腳手架安裝我們的taro項目 taro init myApp 運行到不同小程序教…

從 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目錄 開頭專業總結 一、先搞懂&#xff1a;K8s 到底是什么&#xff1f;能解決什么痛點&#xff1f; 1. K8s 的本質 2. 核心用處&#xff08;解決的痛點&#xff09; 二、K8s 核心知識點&#xff1a;組件與概念&#xff08;標重點&#xff01;&#xff09; &#xff08;一…

03.《交換的底層邏輯:從基礎到應用》

交換基礎 文章目錄交換基礎MAC 地址&#xff1a;設備的 “全球唯一身份證”MAC 地址的基本屬性MAC 地址的三類類型&#xff08;按通信范圍劃分&#xff09;以太幀以太幀的兩個標準格式1. Ethernet_II 格式&#xff08;常用&#xff09;2. IEEE 802.3 格式&#xff08;少用&…

火語言 RPA 界面應用生成:輕量化開發核心優勢

火語言 RPA 界面應用生成功能&#xff0c;主打 “低門檻、快落地”&#xff0c;無需復雜開發環境與專業技術&#xff0c;就能快速實現需求驗證與工具搭建&#xff0c;尤其適配中小團隊與個人&#xff0c;核心優勢如下&#xff1a;?一、1 小時搞定需求驗證&#xff1a;3 步落地…

第三方軟件測試機構【多語言開發(PHP/Java/Python)WEB 應用的安全專業測試流程】

PHP應用測試安全 文件包含漏洞&#xff1a;檢測include/require函數參數未過濾場景&#xff08;如?page../../../etc/passwd&#xff09; 命令注入&#xff1a;檢查system()/exec()函數輸入驗證&#xff08;如| cat /etc/passwd&#xff09; 會話安全&#xff1a;驗證session …

C++條件變量學習

1、概述你知道條件變量"虛假喚醒"問題么&#xff0c;下面代碼有問題么void CFileTaskThread::Run() {while (!m_bStop){CFileItemRequest* pFileItem;{std::unique_lock<std::mutex> guard(m_mtItems);if (m_Filelist.empty()){if (m_bStop)return;// 等待條件…

React Native系統組件(一)

1&#xff0c;View&#xff0c;UI的構建基石 四個方向&#xff0c;水平&#xff0c;水平倒序&#xff0c;垂直&#xff0c;垂直倒序 flexGrow與flex的區別&#xff0c;flexgrow是分父布局剩余的空間&#xff0c;flex是分父布局全部的空間上面的是flexgrow 123 下面的是flex 123…

Git 代碼提交管理指南

目錄 1. 初始設置&#xff08;首次使用 Git 時&#xff09; 2. 日常提交工作流程 場景一&#xff1a;已有本地項目&#xff0c;首次連接到遠程倉庫 場景二&#xff1a;已有遠程倉庫&#xff0c;克隆到本地 3. 更精細的文件管理 4. 提交信息規范 5. 分支管理策略 6. 高級…

go-mapus最簡單的離線瓦片地圖協作

基于leaflet.jsleaflet-geoman.jsgolangbeegogormsqlitewebsocket等實現一個最簡單的地圖協作。繪制圖元&#xff0c;其他用戶瀏覽器上實施顯示繪制和修改結果&#xff0c;大家可同步進行繪制和修改。設置線型和顏色&#xff0c;粗細和透明度。保存到sqlite數據庫。動畫演示地圖…

調式記錄之八位機軟件串口

現在在上班&#xff0c;做的項目幾乎都是關于八位機的&#xff0c;八位機有個挺CD的點硬件資源少&#xff0c;打印之類的需要軟件串口&#xff0c;有時候調的剛到很玄學&#xff0c;也有可能是我知識沒有學得恨透。首先我得需要發送這句話并在代碼里面設置我的延時時間&#xf…

嵌入式學習day40-硬件(1)

嵌入式&#xff1a;以應用為中心&#xff1a;消費電子(手機、藍牙耳機、智能音響&#xff09;、醫療電子(心率脈搏、呼吸機&#xff09;、無人機&#xff08;大疆DJ&#xff09;、機器人&#xff08;人形四足機器人)計算機技術&#xff1a;計算機五大組成&#xff1a;運算器(數…

管理中心理學問:面試中教你識別他人需求動機

“我工作是為了錢&#xff0c;為了吃,住&#xff0c;和用錢買東西。”“我工作是為了地位和認可。”“我工作是為了有所歸屬&#xff0c;為了成為一個團體的成員。”“我工作是想高升。”“我工作是因為人應該工作&#xff0c;這是唯一的權利。”“我工作為了獲取知識和認識世界…