2022-12-12Day6 |242.有效的字母異位詞 | 1. 兩數(shù)之和 202. 快樂(lè)數(shù) 349. 兩個(gè)數(shù)組的交集

242.有效的字母異位詞

題目鏈接:

242. 有效的字母異位詞 - 力扣(Leetcode)
給定兩個(gè)字符串 s 和 t 鲸湃,編寫(xiě)一個(gè)函數(shù)來(lái)判斷 t 是否是 s 的字母異位詞胞四。
注意:若 s 和 t 中每個(gè)字符出現(xiàn)的次數(shù)都相同统锤,則稱(chēng) s 和 t 互為字母異位詞。

收獲的點(diǎn):

1) python的collections模塊:
collections模塊實(shí)現(xiàn)了特定的數(shù)據(jù)容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器 dict , list , set , 和 tuple 的替代選擇猎荠。
這篇((54條消息) Python模塊-collections_紅鯉魚(yú)與綠驢的博客-CSDN博客
)寫(xiě)的特別完整
以Counter函數(shù)為例
Counter是dict的一個(gè)子類(lèi)伊磺,用于對(duì)可哈希對(duì)象進(jìn)行計(jì)數(shù)。

from collections import Counter

a = Counter(['a', 'b', 'c', 'a', 'b', 'a'])  # 使用列表初始化計(jì)數(shù)器
b = Counter(('a', 'b', 'c', 'a', 'b', 'a'))  # 使用元組初始化計(jì)數(shù)器
c = Counter("Hello")  # 使用字符串初始化計(jì)數(shù)器
d = Counter({'a': 3, 'b': 2, 'c': 1})  # 使用字典手動(dòng)地告訴計(jì)數(shù)器的值

e = Counter(a=3, b=2, c=1)  # 使用關(guān)鍵字參數(shù)

print(a)
print(b)
print(c)
print(d)
print(e)

# 輸出
Counter({'a': 3, 'b': 2, 'c': 1})
Counter({'a': 3, 'b': 2, 'c': 1})
Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'a': 3, 'b': 2, 'c': 1})
Counter({'a': 3, 'b': 2, 'c': 1})

更新計(jì)數(shù)

from collections import Counter

a = Counter("Hello")
a.update({'e': 2, 'o': 4})  # 更新計(jì)數(shù)器
b = a.most_common(2)  # 取出頻率最高的2個(gè)值

print(a)
print(a['e'])  # 訪問(wèn)計(jì)數(shù)器
print(b)
for i in "Hello":
    print(i, a[i])

# 輸出
Counter({'o': 5, 'e': 3, 'l': 2, 'H': 1})
3
[('o', 5), ('e', 3)]
H 1
e 3
l 2
l 2
o 5

明白Counter函數(shù)以后這個(gè)題目的答案就非常容易了:

完整代碼:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        #思路:將s和t轉(zhuǎn)化為兩個(gè)字典酒奶,字典的key是元素蚁孔,value是元素出現(xiàn)的次數(shù)。如果兩個(gè)字典的key惋嚎,value相等杠氢,返回就是字母異位詞。
        s1 = Counter(s)
        t1 = Counter(t)
        return s1 == t1

349. 兩個(gè)數(shù)組的交集

題目鏈接:349. 兩個(gè)數(shù)組的交集 - 力扣(Leetcode)

給定兩個(gè)數(shù)組 nums1 和 nums2 另伍,返回 它們的交集 鼻百。輸出結(jié)果中的每個(gè)元素一定是 唯一 的。我們可以 不考慮輸出結(jié)果的順序 摆尝。

收獲的點(diǎn):

1.&符號(hào)為取交集温艇,相當(dāng)于intersection

return [set(nums1) & set(nums2)]
return [set(nums1).intersection(set(nums2)]

2.善用列表解析式

return [ i for i in set(nums1) and i in set(nums2)]

解題代碼:

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        s1 = len(nums1)
        s2 = len(nums1)
        if s1< s2:
            nums1 = nums2
            s1 = s2
        #讓s1為更長(zhǎng)的數(shù)組
        res = []
        for i in nums1:
            if i in nums2 and i not in res:
                res.append(i)
        return res

202. 快樂(lè)數(shù)

題目鏈接:

代碼隨想錄 (programmercarl.com)
編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù) n 是不是快樂(lè)數(shù)。
「快樂(lè)數(shù)」 定義為:
對(duì)于一個(gè)正整數(shù)堕汞,每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和勺爱。
然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是 無(wú)限循環(huán) 但始終變不到 1讯检。
如果這個(gè)過(guò)程 結(jié)果為 1琐鲁,那么這個(gè)數(shù)就是快樂(lè)數(shù)。
如果 n 是 快樂(lè)數(shù) 就返回 true 人灼;不是围段,則返回 false 。

image.png

有想到中間進(jìn)行判斷投放,并且用while奈泪,但是while 條件是 != 1這個(gè)點(diǎn)當(dāng)時(shí)沒(méi)考慮清楚。喜歡這種有意思的題。

完整代碼:

class Solution:
    def isHappy(self, n: int) -> bool:
        pre = set([n])
        def check(nums):
            lst = [ int(val) **2 for val in str(nums)]
            return sum(lst)
        while n != 1:
            n = check(n)
            if n in pre:
                return False
            pre.add(n)
        return True

1 兩數(shù)之和

題目鏈接:

1. 兩數(shù)之和 - 力扣(Leetcode)
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target段磨,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù)取逾,并返回它們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案苹支。但是砾隅,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。你可以按任意順序返回答案债蜜。

最終還是想到最初用的兩層for循環(huán)晴埂,不過(guò)這次能很快想清楚里面的邏輯。

完整代碼:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i] + nums[j] == target:
                    return [i,j]

一個(gè)更好的解法:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = {}
        for i,num in enumerate(nums):
            hashtable[num] = i 

        for j, x in enumerate(nums):
            i = hashtable.get(target-x)
            if i != None and i != j:
                return [j,i]

先建立字典寻定,再查詢字典儒洛,使用了字典查詢dict.get(x)返回索引

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狼速,隨后出現(xiàn)的幾起案子琅锻,更是在濱河造成了極大的恐慌,老刑警劉巖向胡,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恼蓬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡僵芹,警方通過(guò)查閱死者的電腦和手機(jī)处硬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拇派,“玉大人荷辕,你說(shuō)我怎么就攤上這事〖悖” “怎么了疮方?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)茧彤。 經(jīng)常有香客問(wèn)我案站,道長(zhǎng),這世上最難降的妖魔是什么棘街? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮承边,結(jié)果婚禮上遭殉,老公的妹妹穿的比我還像新娘。我一直安慰自己博助,他們只是感情好险污,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般蛔糯。 火紅的嫁衣襯著肌膚如雪拯腮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天蚁飒,我揣著相機(jī)與錄音动壤,去河邊找鬼。 笑死淮逻,一個(gè)胖子當(dāng)著我的面吹牛琼懊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爬早,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哼丈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了筛严?” 一聲冷哼從身側(cè)響起醉旦,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桨啃,沒(méi)想到半個(gè)月后车胡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡优幸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年吨拍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片网杆。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羹饰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碳却,到底是詐尸還是另有隱情队秩,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布昼浦,位于F島的核電站馍资,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏关噪。R本人自食惡果不足惜鸟蟹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望使兔。 院中可真熱鬧建钥,春花似錦、人聲如沸虐沥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至镐依,卻和暖如春匹涮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背槐壳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工然低, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宏粤。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓脚翘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绍哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子来农,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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