計數應用: 資深公民的數量 Number of Senior Citizens_Leetcode #2678

計數應用: 資深公民的數量 Number of Senior Citizens_Leetcode #2678

更新於 發佈於 閱讀時間約 3 分鐘

題目敘述 Number of Senior Citizens


給定一個旅客的車票字串陣列,每個字串的最後第四個和第三個數字代表旅客的年齡。

例如: XXX...XXX2015 代表旅客年齡為20歲。

請計算總共有多少位乘客的年齡 > 60 歲?


測試範例

Example 1:

Input: details = ["7868190130M7522","5303914400F9211","9273338290F4010"]
Output: 2
Explanation: The passengers at indices 0, 1, and 2 have ages 75, 92, and 40. Thus, there are 2 people who are over 60 years old.

Example 2:

Input: details = ["1313579440F2036","2921522980M5644"]
Output: 0
Explanation: None of the passengers are older than 60.

約束條件

Constraints:

  • 1 <= details.length <= 100

輸入陣列長度介於1~100之間。

  • details[i].length == 15

每個旅客字串長度為15

  • details[i] consists of digits from '0' to '9'.

旅客字串裡面的數字一定在0~9的範圍內

  • details[i][10] is either 'M' or 'F' or 'O'.

第11碼代表性別

  • The phone numbers and seat numbers of the passengers are distinct.

每位旅客的電話號碼和座號保證都相異


演算法 生成式 + 計數


根據題意,擷取年齡所在的字串位置,轉成數字,統計有多少位旅客 > 60歲。

Python生成式的教學請參考這篇文章


程式碼 生成式 + 計數

class Solution:

    def countSeniors(self, details: List[str]) -> int:
       

        return sum( ( 1  for d in details if int(d[-4:-2]) > 60 ) )

複雜度分析

時間複雜度:O(n)

線性掃描每一筆旅客資料,所需時間為O(n)


空間複雜度: O(1)

所用到的都是固定尺寸的臨時變數,所需空間為O(1),常數級別。


Reference

[1] Number of Senior Citizens - LeetCode

avatar-img
小松鼠的演算法樂園
95會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言
avatar-img
留言分享你的想法!
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。