力扣周賽398題解

特殊數組Ⅰ

如果數組的每一對相鄰元素都是兩個奇偶性不同的數字,則該數組被認為是一個?特殊數組?。

Aging 有一個整數數組?nums。如果?nums?是一個?特殊數組?,返回?true,否則返回?false

示例 1:

輸入:nums = [1]

輸出:true

解釋:

只有一個元素,所以答案為?true

示例 2:

輸入:nums = [2,1,4]

輸出:true

解釋:

只有兩對相鄰元素:?(2,1)?和?(1,4),它們都包含了奇偶性不同的數字,因此答案為?true

示例 3:

輸入:nums = [4,3,1,6]

輸出:false

解釋:

nums[1]?和?nums[2]?都是奇數。因此答案為?false

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

? ? ? ? 比較暴力,可以直接判斷相鄰的元素的奇偶性,如果相同返回False,如果檢查沒有的話,返回True。

代碼如下:

class Solution:def isArraySpecial(self, nums: List[int]) -> bool:for x,y in pairwise(nums):if x%2 == y%2:return Falsereturn True

特殊數組Ⅱ

如果數組的每一對相鄰元素都是兩個奇偶性不同的數字,則該數組被認為是一個?特殊數組?。

周洋哥有一個整數數組?nums?和一個二維整數矩陣?queries,對于?queries[i] = [fromi, toi],請你幫助周洋哥檢查子數組?nums[fromi..toi]?是不是一個?特殊數組?

返回布爾數組?answer,如果?nums[fromi..toi]?是特殊數組,則?answer[i]?為?true?,否則,answer[i]?為?false?。

示例 1:

輸入:nums = [3,4,1,2,6], queries = [[0,4]]

輸出:[false]

解釋:

子數組是?[3,4,1,2,6]。2 和 6 都是偶數。

示例 2:

輸入:nums = [4,3,1,6], queries = [[0,2],[2,3]]

輸出:[false,true]

解釋:

  1. 子數組是?[4,3,1]。3 和 1 都是奇數。因此這個查詢的答案是?false
  2. 子數組是?[1,6]。只有一對:(1,6),且包含了奇偶性不同的數字。因此這個查詢的答案是?true

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105
  • 1 <= queries.length <= 105
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] <= nums.length - 1

?????????直接暴力去解決會超時,因為暴力的解法是O(n^2),而數據范圍是1e5。

????????換一種考慮的方法,既然是要考慮相鄰的元素之間的奇偶性,不妨直接考慮他們之間的“逗號”。

? ? ? ? 比如說例子——

? ? ? ? 4, 3, 1, 6

? ? ? ? 我們去考慮每個逗號兩側的數字的奇偶性的相同,如果是相同的話,記為0,不同的話記為1.

? ? ? ? 那么就是這樣——

? ? ? ? 0, 1, 0

做個圖:

? ? ? ? 但是我們是需要去查詢一段區間內是否有這種特殊的數組,不難想到使用前綴和的方法。

? ? ? ? 查詢的時候發現需要加一個前導0.

? ? ? ? 原理就是只要這個區間的兩端的端點的前綴和不相等就是False,反之就是True。

代碼如下:

class Solution:def isArraySpecial(self, nums: List[int], queries: List[List[int]]) -> List[bool]:s = [0]for x,y in pairwise(nums):s.append(s[-1]+(x%2==y%2))return [s[f] == s[t] for f,t in queries]

所有數對中數位不同之和

車爾尼有一個數組?nums?,它只包含??整數,所有正整數的數位長度都?相同?。

兩個整數的?數位不同?指的是兩個整數?相同?位置上不同數字的數目。

請車爾尼返回?nums?中?所有?整數對里,數位不同之和。

示例 1:

輸入:nums = [13,23,12]

輸出:4

解釋:
計算過程如下:
-?13 和?23 的數位不同為?1 。
- 13?和 12?的數位不同為?1 。
-?23?和?12?的數位不同為?2 。
所以所有整數數對的數位不同之和為?1 + 1 + 2 = 4?。

示例 2:

輸入:nums = [10,10,10,10]

輸出:0

解釋:
數組中所有整數都相同,所以所有整數數對的數位不同之和為 0 。

提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i] < 109
  • nums?中的整數都有相同的數位長度。

? ? ? ? 題目中說明,只包含有正整數,并且正整數的數位長度是相同的,需要我們返回的是所有正數中不同數位之和。

? ? ? ? 把所有的數位分開來考慮,舉個例子——

? ? ? ? 假如說現在已經考慮到了第1個數(下標為1)的各位,不妨把所有的各位抽出來看看如何計算。

????????

? ? ? ? 箭頭所指向的3,就是我們當前考慮到的地方,那么是如何進行考慮的呢?

? ? ? ? 因為我們是要統計每個數字的每一位的不同的數量,下標剛好就是在我們當前這個位置一共有多少個數字,我們可以搞一個哈希表,來統計在我們這個位置之前的,這個位置的值出現的次數。

? ? ? ? 又因為這個值只會是【0,9】,所以完全可以使用數組來模擬。

class Solution:def sumDigitDifferences(self, nums: List[int]) -> int:ans = 0cnt = [[0]*10 for _ in str(nums[0])]for k,x in enumerate(nums):for i,v in enumerate(map(int,str(x))):ans += k - cnt[i][v]cnt[i][v]+=1return ans

????????

到達第 K 級臺階的方案數

給你有一個?非負?整數?k?。有一個無限長度的臺階,最低?一層編號為 0 。

虎老師有一個整數?jump?,一開始值為 0 。虎老師從臺階 1 開始,虎老師可以使用?任意?次操作,目標是到達第?k?級臺階。假設虎老師位于臺階?i?,一次?操作?中,虎老師可以:

  • 向下走一級到?i - 1?,但該操作?不能?連續使用,如果在臺階第 0 級也不能使用。
  • 向上走到臺階?i + 2jump?處,然后?jump?變為?jump + 1?。

請你返回虎老師到達臺階?k?處的總方案數。

注意?,虎老師可能到達臺階?k?處后,通過一些操作重新回到臺階?k?處,這視為不同的方案。

示例 1:

輸入:k = 0

輸出:2

解釋:

2 種到達臺階 0 的方案為:

  • 虎老師從臺階?1 開始。
    • 執行第一種操作,從臺階 1 向下走到臺階 0 。
  • 虎老師從臺階 1 開始。
    • 執行第一種操作,從臺階 1 向下走到臺階 0 。
    • 執行第二種操作,向上走 20?級臺階到臺階 1 。
    • 執行第一種操作,從臺階 1 向下走到臺階 0 。

示例 2:

輸入:k = 1

輸出:4

解釋:

4 種到達臺階 1 的方案為:

  • 虎老師從臺階 1 開始,已經到達臺階 1 。
  • 虎老師從臺階 1 開始。
    • 執行第一種操作,從臺階 1 向下走到臺階 0 。
    • 執行第二種操作,向上走 20?級臺階到臺階 1 。
  • 虎老師從臺階 1 開始。
    • 執行第二種操作,向上走 20?級臺階到臺階 2 。
    • 執行第一種操作,向下走 1 級臺階到臺階 1 。
  • 虎老師從臺階 1 開始。
    • 執行第一種操作,從臺階 1 向下走到臺階 0 。
    • 執行第二種操作,向上走?20?級臺階到臺階 1 。
    • 執行第一種操作,向下走 1 級臺階到臺階 0 。
    • 執行第二種操作,向上走 21?級臺階到臺階 2 。
    • 執行第一種操作,向下走?1 級臺階到臺階 1 。

提示:

  • 0 <= k <= 10^9

? ? ? ? 先來解釋一下這個題目的意思,說是最小的階梯是0,從1階梯開始,要求我們走到k階梯,有兩種操作,但是是有條件的。

? ? ? ? 操作一:向下走一級

? ? ? ? 操作二:向上走 2^jump 級

? ? ? ? 那么很容易想到使用暴力搜索改成記憶化的方法來求解。

? ? ? ? 畫一個圖來幫助我們理解一下——

? ? ? ? 那么遞歸的出口又在哪里呢?

? ? ? ? 這需要我們在來分析一下了——

? ? ? ? 首先,分析出一個原理,在遞歸的過程中,數字 i 是逐漸變大的。

? ? ? ? 當 i 已經等于 k 的時候我們不能結束,因為他繼續搜下去可能會再有一個答案。

? ? ? ? 當 i 等于 k + 1 的時候我們還不能結束,因為這個時候只要執行了操作一就可以給結果再加上一個一,變成 i 等于 k,回到第一點。

? ? ? ? 當 i 等于 k+2的時候,我們就可以結束了,因為這個時候無論如何 i 都不可能能等于 k 了,直接返回0即可。

? ? ? ? 還有一點值得注意的就是我們需要再參數中加上一個bool類型的變量,用來說明喔當前這種情況是否是兩個操作都可以做。

最后代碼如下:

class Solution:def waysToReachStair(self, k: int) -> int:@cachedef dfs(i:int,j:int,p:bool)->int:if i >= k+2:return 0ans = 1 if i==k else 0ans += dfs(i+(1<<j),j+1,True)if p:ans += dfs(i-1,j,False)return ansreturn dfs(1,0,True)

?

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

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

相關文章

SEO:屏蔽流氓蜘蛛抓取

解決屏蔽流氓蜘蛛抓取&#xff0c;如MJ12bot 、DotBot 、BLEXBot 、PetalBot 、DataForSeoBot 1、robots文件屏蔽 User-agent: MJ12bot Disallow: / User-agent:DotBot Disallow: / User-agent:BLEXBot Disallow: / User-agent:PetalBot Disallow: / User-agent:DataForSeoBot…

【C++】<知識點> 標準和文件的輸入輸出

目錄 一、輸入輸出操作 1. 相關的類 2. 標準流對象 3. istream類的成員函數 二、流操縱算子 1. 整數流的基數 2. 浮點數精度的流操縱算子 3. 域寬的流操縱算子 4. 其他的流操縱算子 5. 用戶自定義流操縱算子 三、文件讀寫 1. 文本文件的讀寫 2. 二進制文件的讀寫 3. 文件讀寫…

vue 點擊復制文本到剪貼板

一、首先在vue文件的template中定義復制按鈕 <div size"small" v-if"item.prop jadeCode" class"cell-container"><span>{{ scope.row.jadeCode }}</span> <button click"handleCopy(scope.row.jadeCode)" clas…

一周開發一個客服工單系統

開發一個客服工單系統在一周內完成&#xff0c;需要詳細的計劃和高效的執行。以下是一個詳細的開發計劃&#xff0c;涵蓋每天的主要任務和技術棧選擇&#xff1a; 演示效果&#xff1a;gofly.v1kf.com 技術棧選擇 前端&#xff1a;React.js 或 Vue.js后端&#xff1a;Go (Gin)數…

K8s是如何Watch的?

1. 概述 進入 K8s 的世界&#xff0c;會發現幾乎所有對象都被抽象為了資源(Resource)&#xff0c;包括 K8s Core Resources(Pod, Service, Namespace 等)、CRD、APIService 擴展的資源類型。同時 K8s 底層將這些資源統一抽象為了 RESTful 的存儲(Storage)&#xff0c;一方面服…

jellyfish安裝及使用(Bioinformatics工具-020)

01 背景 基因組survey以測序技術為基礎&#xff0c;基于小片段文庫的低深度測序&#xff0c;通過K-mer分析&#xff0c;快速獲得基因組大小、雜合度、重復序列比例等基本信息&#xff0c;為制定該物種的全基因組de novo測序策略提供有效依據。 jellyfish (水母) 是一個用于快…

Docker-鏡像遷移的三種方式=>備份恢復公有倉庫私有倉庫

制作好的鏡像要被別人使用&#xff0c;有三種方式&#xff1a; 1.先備份鏡像&#xff0c;別人通過u盤或者其它方式拷貝后&#xff0c;再恢復鏡像&#xff0c;這種方式比較麻煩 2.將制作的鏡像上傳到公共鏡像倉庫&#xff0c;被別人拉取后使用&#xff0c;但可能存在網絡不通暢或…

【零基礎C語言】內存函數

前言&#xff1a; 我們之前學過strcpy&#xff0c;strcmp等等函數&#xff0c;他們可以拷貝字符串和比較字符串等等&#xff0c;那么有沒有什么函數不光可以拷貝字符串還可以拷貝其他的數據呢&#xff0c;答案就是內存函數。 相較于字符串函數&#xff0c;內存函數可以拷貝的…

贖金信[簡單]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你兩個字符串&#xff1a;ransomNote和magazine&#xff0c;判斷ransomNote能不能由magazine里面的字符構成。如果可以&#xff0c;返回true&#xff1b;否則返回false。magazine中的每個字符只能在ransomNote中使用一次。 示例 …

DPDK實踐之(1)dpdk基礎使用

DPDK實踐之(1)dpdk基礎使用 Author: Once Day Date: 2024年5月19日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文檔可參考專欄&#xff1a;Linux基礎知識_Once…

java判斷日期格式的正則表達式

java判斷日期格式的正則表達式 在Java中&#xff0c;你可以使用String類的matches()方法來檢查一個字符串是否匹配特定的正則表達式。以下是一個用于判斷日期格式是否為YYYY-MM-DD的正則表達式的例子&#xff1a; public class DateValidator { public static boolean isVal…

C語言 | Leetcode C語言題解之第109題有序鏈表轉換二叉搜索樹

題目&#xff1a; 題解&#xff1a; int getLength(struct ListNode* head) {int ret 0;while (head ! NULL) {ret, head head->next;}return ret; }struct TreeNode* buildTree(struct ListNode** head, int left, int right) {if (left > right) {return NULL;}int …

Mac維護神器CleanMyMac X成為你的蘋果電腦得力助手

在數字化時代&#xff0c;Mac電腦已成為眾多用戶的首選。然而&#xff0c;隨著頻繁的使用和數據量的日益增長&#xff0c;許多Mac用戶面臨著系統雜亂、存儲空間不足以及隱私保護等問題。幸運的是&#xff0c;"CleanMyMac X"這款優化和清理工具應運而生&#xff0c;它…

ROCm上情感分析:使用循環神經網絡

15.2. 情感分析&#xff1a;使用循環神經網絡 — 動手學深度學習 2.0.0 documentation (d2l.ai) 代碼 import torch from torch import nn from d2l import torch as d2lbatch_size 64 train_iter, test_iter, vocab d2l.load_data_imdb(batch_size)class BiRNN(nn.Module):…

java抽象類,接口,枚舉練習題

第一題&#xff1a; 答案&#xff1a; class Animal{//成員變量protected String name;protected int weight;//構造方法public Animal(){this.name"refer";this.weight50;}public Animal(String name,int weight){this.namename;this.weightweight;}//成員方法publ…

Bugku Crypto 部分題目簡單題解(四)

目錄 python_jail 簡單的rsa 托馬斯.杰斐遜 這不是md5 進制轉換 affine Crack it rsa python_jail 啟動場景 使用虛擬機nc進行連接 輸入print(flag) 發現報錯&#xff0c;經過測試只能傳入10個字符多了就會報錯 利用python中help()函數&#xff0c;借報錯信息帶出flag變…

【力扣刷題筆記第三期】Python 數據結構與算法

先從簡單的題型開始刷起&#xff0c;一起加油啊&#xff01;&#xff01; 點個關注和收藏唄&#xff0c;一起刷題鴨&#xff01;&#xff01; 第一批題目 1.設備編號 給定一個設備編號區間[start, end]&#xff0c;包含4或18的編號都不能使用&#xff0c;如&#xff1a;418、…

對于map的新應用

題源codeforces1974 problemC 題目大意 定義當兩個三元組A和B中&#xff0c;滿足三元組中有且僅有兩個元素相等&#xff0c;比如 a 1 b 1 , a 2 b 2 , a 3 ! b 3 a_1b_1,a_2b_2,a_3!b_3 a1?b1?,a2?b2?,a3?!b3? 這只是一種情況&#xff0c;三種情況之一 解題思路 …

java抽象類和接口知識總結

一.抽象類 1.啥是抽象類 用專業語言描述就是&#xff1a;如果一個類中沒有包含足夠的信息來描繪一個具體的對象&#xff0c;這樣的類就是抽象類 當然這話說的也很抽象&#xff0c;所以我們來用人話來解釋一下抽象類 拋開編程語言這些&#xff0c;就以現實舉例&#xff0c;我…

每日練習之排序——鏈表的合并;完全背包—— 兌換零錢

鏈表的合并 題目描述 運行代碼 #include<iostream> #include<algorithm> using namespace std; int main() { int a[31];for(int i 1;i < 30;i)cin>>a[i];sort(a 1,a 1 30);for(int i 1;i < 30;i)cout<<a[i]<<" ";cout&…