經典遞歸題 擴充序列 兩種做法


一道經典遞歸題,兩種做法,常規遞歸做法和模擬數學規律解法

3695. 擴充序列 - AcWing題庫

擴充序列

樣例解釋

對于樣例 1,經過 2 次擴充,得到序列 [1,2,1,3,1,2,1]其第 2 個元素為 2。

對于樣例 2,經過 3次擴充,得到序列 [1,2,1,3,1,2,1,4,1,2,1,3,1,2,1]其第 8個元素為 4。

思路一

先看序列的長度。N=1時,序列長度為1,N=2時,序列長度為3

N=3時,序列長度為7,N=4時,序列長度為15

不難看出規律

假設長度為Len,則N和長度的關系為

Len=pow(2,n)-1;

則我們在算K時,有三種情況

情況1

是k=pow(2,n-1),則K是最中間那個數,也就是擴容第N-1次時,新增的那個數,通過樣例可以看出,新增的數,就是N本身,例如擴容3次,新增的數是4

1,2 ,1,3, 1,2, 1,4, 1,2, 1,3 ,1,2 ,1

所以直接返回N,即是結果,k的值

情況2

是k<pow(2,n-1),接著計算n=n-1時,k的值是多少

情況3

是k>pow(2,n-1),只需要把k-(pow(2,n-1)),然后按情況2計算即可,因為中點左右兩邊的序列,是一樣的

通過這三種情況,發現可以直接遞歸做,看一下數據范圍

n<50,最多是O(4n),時間復雜度沒問題,但是pow(2,50)爆int,需要longlong

實現代碼1

#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll ;
ll n,k,res;
ll dfs(ll k){if(k==pow(2,n-1))return n;//情況一,確定是新增數,直接返回//如果是情況三,則變成情況二if(k>pow(2,n-1))k-=pow(2,n-1);//縮小范圍,只需要查找在上次擴充之前出現的數n-=1;//遞歸dfs(k);
}
int main(){cin>>n>>k;res=dfs(k);cout<<res;return 0;
}

思路二

發現數列規律

所有奇數位都是1,也就是如果k%2!=0,則k的值為1,這里我們只看值,則k是最初始的數

反之

如果k%2==0,則k一定是擴充的數,那么我們利用k,就可以推斷出,k位對應的值,是在第幾次擴充出現的

例如

1,2 ,1,3, 1,2, 1,4, 1,2, 1,3 ,1,2 ,1

紅4是第八位,對應的k是8,k/2=4,4/2=2,2/2=1,k能除以3次,所以k對應的值,是第三次擴充后出現

1,2 ,1,3, 1,2, 1,4, 1,2, 1,3 ,1,2 ,1

紅2是第十位,k=10,10/2=5,5是奇數,所以不用除了,k除了一次,k對應的值,是在第一次擴充時出現的

1,2 ,1,3, 1,2, 1,4, 1,2, 1,3 ,1,2 ,1

紅3是第十二位,k=12,12/2=6,6/2=3,3是奇數,不用除了,k除了一次,k對應的值,是在第二次擴充時出現的

第三次擴充出現的值是4,第二次擴充出現的值是3,第一次擴充出現的值是2

所以我們只需要計算,k對應的值是第幾次擴充時出現的,然后+1即可

實現代碼二

#include<iostream>
using namespace std;
typedef long long ll ;ll n,k,res=0;
int main(){cin>>n>>k;//k&1是位運算,如果&1為真,則k%2!=0while(!(k&1))k>>=1,res++;cout<<res+1;return 0;
}

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

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

相關文章

針對airtest的poco標簽正則匹配

1.text屬性方式定位 poco(text“中古屋”) 換成正則表達式定位 poco(textMatches“正則表達式”) poco(textMatches".*中古屋") 2.name屬性方式定位 poco(name‘com.addcn.android.house591:id/grid_item_text’) 換成正則表達式定位 poco(nameMatches“正則表…

Linux下如何設置可執行文件和庫文件的環境變量?

在Linux系統中&#xff0c;可執行文件和庫文件的查找路徑是由環境變量控制的&#xff0c;其中最重要的是PATH環境變量用于可執行文件&#xff0c;而動態庫的查找路徑則由LD_LIBRARY_PATH環境變量決定。下面分別介紹這兩個方面&#xff1a; 可執行文件的搜索路徑&#xff08;PA…

對不起,AI大模型不是風口

“我們正處在全新起點&#xff0c;這是一個以大模型為核心的人工智能新時代&#xff0c;大模型改變了人工智能&#xff0c;大模型即將改變世界。”——5月26日&#xff0c;百度創始人、董事長兼CEO李彥宏先生在2023中關村論壇發表了《大模型改變世界》演講。 李彥宏指出&#…

【SpringCloud】Hystrix源碼解析

hystrix是一個微服務容錯組件&#xff0c;提供了資源隔離、服務降級、服務熔斷的功能。這一章重點分析hystrix的實現原理 1、服務降級 CAP原則是分布式系統的一個理論基礎&#xff0c;它的三個關鍵屬性分別是一致性、可用性和容錯性。當服務實例所在服務器承受過大的壓力或者受…

c++【入門】挖胡蘿卜

限制 時間限制 : 1 秒 內存限制 : 128 MB 題目 小兔朱迪挖了x個胡蘿卜&#xff0c;狐貍尼克挖到胡蘿卜數量是小兔挖到的3倍&#xff0c;小羊肖恩挖到胡蘿卜的數量比狐貍尼克少8個&#xff1b; 請你編程計算一下狐貍尼克和小羊肖恩分別挖了幾個胡蘿卜&#xff0c;以及平均每…

前端工程化09-webpack靜態的模塊化打包工具(未完結)

9.1、開發模式的進化歷史 webpacks是一個非常非常的強大的一個工具&#xff0c;相應的這個東西的學習也是有一定的難度的&#xff0c;里邊的東西非常的多&#xff0c;里面涉及到的 概念的話也是非常非常的多的。 這個東西既然非常重要&#xff0c;那么在我們前端到底處于怎樣…

HCIA4.26-5.10

OSPF ——開放式最短路徑優先協議 無類別鏈路狀態IGP動態路由協議 距離矢量協議 運行距離矢量協議的路由器會周期性的泛洪自己的路由表&#xff0c;通過路由之間的交互&#xff0c;每臺路由器都從相鄰的路由器學習到路由條目&#xff0c;隨后加載進自己的路由表中。對于網絡…

GD32 開發筆記

0x01 GPIO時鐘使能的坑 使用GD32的GPIO引腳來控制 74HC595 &#xff0c;發現引腳一直無法控制&#xff0c;始終輸出3.3v&#xff0c;初始化環節應該是出了問題。用通俗的話來說&#xff0c;就是點燈點不亮 排查了MCU、光耦隔離芯片、被強行上拉等問題&#xff0c;最后發現是G…

Python代碼分析和修復工具庫之coala使用詳解

概要 代碼質量在軟件開發中至關重要,保持代碼的可讀性、一致性和易維護性是每個開發者的目標。coala 是一個開源的代碼分析和修復工具,旨在幫助開發者自動化代碼質量檢查,支持多種編程語言,包括 Python、C++、JavaScript 等。通過使用 coala,開發者可以方便地集成代碼檢查…

AI時代的軟件工程:挑戰與改變

人工智能&#xff08;AI&#xff09;正以驚人的速度改變著我們的生活和工作方式。作為與AI關系最為密切的領域之一&#xff0c;軟件工程正經歷著深刻的轉變。 1 軟件工程的演變 軟件工程的起源 軟件工程&#xff08;Software Engineering&#xff09;是關于如何系統化、規范化地…

input調用手機攝像頭實現拍照功能vue

項目需要一個拍照功能&#xff0c;實現功能如下圖所示:若使用瀏覽器則可以直接上傳圖片&#xff0c;若使用手機則調用手機攝像頭拍照。 1.代碼結構 <!--input標簽--> <input ref"photoRef"type"file"accept"image/*"capture"envir…

Leetcode 3202. Find the Maximum Length of Valid Subsequence II

Leetcode 3202. Find the Maximum Length of Valid Subsequence II 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3202. Find the Maximum Length of Valid Subsequence II 1. 解題思路 這一題的話是上一題3201. Find the Maximum Length of Valid Subsequence I的升級版&am…

基于多源數據的密碼攻防領域知識圖譜構建

源自&#xff1a; 信息安全與通信保密雜志社 作者&#xff1a;曹增輝 , 郭淵博 , 黃慧敏 摘 要 提高網絡空間安全的密碼攻防能力&#xff0c;需要形成可表示、可共享、可分析的領域知識模式和知識庫。利用自頂向下的構建方法&#xff0c;并通過本體構建方法梳理密碼攻防領域…

IPSec:互聯網協議安全機制的深度解析與應用

目錄 一、IPSec概述 二、IPSec的組成 三、IPSec的工作原理 四、IPSec的用途 IPSec&#xff08;Internet Protocol Security&#xff09;作為現代網絡通信中不可或缺的安全基礎設施&#xff0c;旨在為基于IP&#xff08;Internet Protocol&#xff09;的數據傳輸提供端到端的…

MySQL數據庫鎖詳解

MySQL數據庫鎖詳解 在多用戶環境下&#xff0c;數據庫鎖用于保證事務的完整性和數據的一致性。MySQL提供了多種不同類型的鎖&#xff0c;以適應不同的并發需求和性能考慮。本文將詳細介紹MySQL中的鎖機制&#xff0c;包括鎖的類型、鎖定機制的原理以及如何管理鎖。 1. 鎖的類…

【Linux】虛擬機安裝openEuler 24.03 X86_64 教程

目錄 一、概述 1.1 openEuler 覆蓋全場景的創新平臺 1.2 系統框架 1.3 平臺框架 二、安裝詳細步驟 一、概述 1.1 openEuler 覆蓋全場景的創新平臺 openEuler 已支持 x86、Arm、SW64、RISC-V、LoongArch 多處理器架構&#xff0c;逐步擴展 PowerPC 等更多芯片架構支持&…

時間序列季節性和周期性

季節性 (Seasonality) 定義 季節性是指時間序列數據中由于自然、社會或經濟因素&#xff0c;在固定且短期的時間間隔內&#xff08;如每年、每季度、每月或每周&#xff09;重復出現的模式或波動。 特點 固定周期&#xff1a;季節性波動有一個固定的周期。例如&#xff0c;…

【小工具】 Unity相機寬度適配

相機默認是根據高度適配的&#xff0c;但是在部分游戲中需要根據寬度進行適配 實現步驟 定義標準屏幕寬、高判斷標準屏幕寬高比與當前的是否相等通過**&#xff08;標準寬度/當前寬度&#xff09; &#xff08;標準高度 / 當前高度&#xff09;**計算縮放調整相機fieldOfView即…

iptables 防火墻(一)

iptables 防火墻&#xff08;一&#xff09; 一、Linux 防火墻基礎防火墻分類 二、iptables 的表、鏈結構規則表規則鏈數據包過濾的匹配流程 三、編寫防火墻規則iptables 的安裝iptables的基本語法規則的匹配條件通用匹配隱含匹配顯式匹配 四、總結 在網絡安全的世界里&#xf…

XRP對接文檔

XRP對接文檔 技術預研 參考文檔 官方文檔: https://xrpl.org/list-xrp-in-your-exchange.html 官方文檔: https://xrpl.org/list-xrp-as-an-exchange.html#flow-of-funds 交易所對接XRP(內容齊全, 很推薦) https://blog.csdn.net/weixin_40396076/article/details/10020207…