📶連綿不斷 擁有最大AND值的子陣列長度_Longest Subarray With Max AND_LC #2419

更新於 2024/09/14閱讀時間約 1 分鐘

題目敘述 2419. Longest Subarray With Maximum Bitwise AND


給定一個輸入陣列nums,請找出擁有最大bitwise AND值的子陣列長度是多少?


測試範例

Example 1:

Input: nums = [1,2,3,3,2,2]
Output: 2
Explanation:
[3,3]AND值最大,子陣列長度為2

Example 2:

Input: nums = [1,2,3,4]
Output: 1
Explanation:
[4]AND值最大,子陣列長度為1

約束條件

Constraints:

  • 1 <= nums.length <= 10^5

輸入陣列nums的長度介於1~十萬之間。

  • 1 <= nums[i] <= 10^6

每個陣列元素值介於1~一百萬之間。


演算法 根據AND特質去延伸最大值的連續區間


bitwise AND值如果要維持,
那就必須每個bit都相同,可以推出區間內的值都必須相同


如果要得到bitwise AND最大值,那麼本身就必須是陣列最大值


舉個例子幫助理解,例如 999 AND 999 肯定大於 888 AND 888。


程式碼 根據AND特質去延伸最大值的連續區間

class Solution:
def longestSubarray(self, nums: List[int]) -> int:

# Find the largest number in nums.
max_val = 0

# Length of subarray which has max bitwise AND value
best_length = 0

# Count the length of the continues subarray that only contains MAX
counter = 0

for number in nums:

if number == max_val:
# If the current number is MAX, increase counter
counter +=1

# update best length of subarray which has max bitwise AND value
best_length = max(best_length, counter)

elif number > max_val:

# update max value
max_val = number

# reset best length and counter as 1
best_length, counter = 1, 1

else:
# Otherwise, reset count.
counter = 0

return best_length

複雜度分析

時間複雜度: O(n)

線性掃描每個元素值,計算擁有最大AND值區間的子陣列長度。

空間複雜度: O(1)

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


Reference

[1] Longest Subarray With Maximum Bitwise AND - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Count the Number of Consistent Strings 給定一個字庫allowed,和一個字串陣列words,請計算有幾個word是一致的? 一致的定義是: word內所有的英文字母都可以在allowed內找到。
Minimum Bit Flips to Convert Number 給定兩個整數start 和 goal,請問最少需要幾次bit翻轉,使得start等於goal? 註: bit翻轉的定義就是0->1 或者1->0
2326. Spiral Matrix IV 題目給定一個Linked list和對應的矩陣高度m、寬度n。 請依照順時針的拜訪順序, 從左上角出發,依照次序把Linked List的內容填到矩陣裡。 如果有剩餘不足的空位,就填補-1。 最後將填補好的矩陣返回作為答案。
Walking Robot Simulation 機器人在一個無限大小的 X-Y 2D平面上行走,從點 (0, 0) 開始出發,一開始面向北方。 機器人可以接收以下三種類型的命令 -2 :向左轉 90 度 -1 :向右轉 90 度 1 <= x <= 9 :向前移動 x步
Leetcode #1945. Sum of Digits of String After Convert 給定一個由小寫字母組成的字串 s ,以及一個整數 k 。 首先,用英文字母順序的位置替換每個字母,將 s 轉換 為整數 並且計算digits sum,反覆迭代k次。
給定一個長度為 n,而且索引從 0 開始的整數陣列 chalk 和參數 k 。一開始粉筆盒裡總共有 k 支粉筆。 當編號為 i 的學生回答問題時,會消耗 chalk[i] 支粉筆。 如果剩餘粉筆數量小於 chalk[i] ,那麼學生 i 需要 補充 粉筆。 請找出需要補充粉筆的學生的學生編號。
Count the Number of Consistent Strings 給定一個字庫allowed,和一個字串陣列words,請計算有幾個word是一致的? 一致的定義是: word內所有的英文字母都可以在allowed內找到。
Minimum Bit Flips to Convert Number 給定兩個整數start 和 goal,請問最少需要幾次bit翻轉,使得start等於goal? 註: bit翻轉的定義就是0->1 或者1->0
2326. Spiral Matrix IV 題目給定一個Linked list和對應的矩陣高度m、寬度n。 請依照順時針的拜訪順序, 從左上角出發,依照次序把Linked List的內容填到矩陣裡。 如果有剩餘不足的空位,就填補-1。 最後將填補好的矩陣返回作為答案。
Walking Robot Simulation 機器人在一個無限大小的 X-Y 2D平面上行走,從點 (0, 0) 開始出發,一開始面向北方。 機器人可以接收以下三種類型的命令 -2 :向左轉 90 度 -1 :向右轉 90 度 1 <= x <= 9 :向前移動 x步
Leetcode #1945. Sum of Digits of String After Convert 給定一個由小寫字母組成的字串 s ,以及一個整數 k 。 首先,用英文字母順序的位置替換每個字母,將 s 轉換 為整數 並且計算digits sum,反覆迭代k次。
給定一個長度為 n,而且索引從 0 開始的整數陣列 chalk 和參數 k 。一開始粉筆盒裡總共有 k 支粉筆。 當編號為 i 的學生回答問題時,會消耗 chalk[i] 支粉筆。 如果剩餘粉筆數量小於 chalk[i] ,那麼學生 i 需要 補充 粉筆。 請找出需要補充粉筆的學生的學生編號。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
阿揪西放送的老朋友們應該知道,今年我剛結束了一段大齡留學生活。這段時間偶爾有網友私訊詢問學校申請、開銷和準備流程等問題,我也樂於分享各種細節。其中常提到的建議之一就是:開通一個便捷的網銀帳戶。
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
題目敘述 Longest Palindromic Subsequence 給定一個字串s,請找出字串s的最長回文子序列的長度。 註: 子序列 不要求一定要連續。 測試範例 Input: s = "bbbab" Output: 4
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
Thumbnail
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
Thumbnail
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學
Thumbnail
這題也是滿經典的DP動態規劃教學案例和題目,就順便複習一下吧。 題目敘述 題目會給我們兩個字串text1, text2。 要求我們找出兩個字串的最長共同子序列,並且返回最長共同子序列的長度。 如果彼此沒有共同子序列,則返回0。 題目的原文敘述 測試範例 Example 1: In
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
阿揪西放送的老朋友們應該知道,今年我剛結束了一段大齡留學生活。這段時間偶爾有網友私訊詢問學校申請、開銷和準備流程等問題,我也樂於分享各種細節。其中常提到的建議之一就是:開通一個便捷的網銀帳戶。
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
題目敘述 Longest Palindromic Subsequence 給定一個字串s,請找出字串s的最長回文子序列的長度。 註: 子序列 不要求一定要連續。 測試範例 Input: s = "bbbab" Output: 4
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
Thumbnail
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
Thumbnail
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學
Thumbnail
這題也是滿經典的DP動態規劃教學案例和題目,就順便複習一下吧。 題目敘述 題目會給我們兩個字串text1, text2。 要求我們找出兩個字串的最長共同子序列,並且返回最長共同子序列的長度。 如果彼此沒有共同子序列,則返回0。 題目的原文敘述 測試範例 Example 1: In