每日算法題推送

題目1:快樂數

我們先來結合實例看一下判斷快樂數的整個過程:

結合題目可以知道,如果一個數是快樂數,那么這個數最終就會變成1,如果一個數不是快樂數,那么變化序列最終就會陷入循環。想一下,如果題目沒有告訴我們“如果一個數不是快樂數,最后會陷入死循環”這句話,我們應該如何來證明這個觀點?

這里就要用到小學學過的“鴿巢原理”(抽屜原理)來進行簡單的證明。

鴿巢原理:如果一共有n個鴿巢,有n+1只鴿子,那么一定存在至少一個鴿巢,這個鴿巢里面的格子數大于1.

我們知道n是一個整型類型而且n>0,那么n的取值范圍就在1~2^31-1,而2^31-1=2147483647,這個數一定小于9999999999,如果非快樂數的變化不是循環的,那么總有一次會變成最大的那一個數2147483647,而這個數小于9999999999,在經過題目所說的變化以后,一定會變成小于(9^2)*10=810的數x,所以這個數經過相應的又會進入新一輪的循環,所以我們一開始的假設(即非快樂數的變化不是循環的)是錯誤的,所以一個非快樂數,他經過相應的變化以后會進入一個循環的序列。

結合上圖和解釋,我們可以將序列的變化抽象為下面的圖:

如果看過數據結構之鏈表篇的兄弟對這一張圖一定很熟悉,這就是我們之前做的帶環的鏈表的那一道題(這道題可以參考:https://blog.csdn.net/pusue_the_sun/article/details/150438603?fromshare=blogdetail&sharetype=blogdetail&sharerId=150438603&sharerefer=PC&sharesource=pusue_the_sun&sharefrom=from_link)

在那一道題中我們所使用的思路是前后指針,同理這一道題我們也可以使用前后指針的思想。

我們先定義一個快指針和慢指針,初始時慢指針的值就等于n,而快指針的值就等于n經過一次變化以后所得到的值。然后每次讓慢指針經歷一次變化,快指針經過兩次變化,最后快慢指針一定都會進入成環的那一部分,那么最終快慢指針就一定會相遇,即它們兩個的值一定會相同(這個結論的分析過程見帶環的鏈表那一道題),接下來我們只需判斷當它們兩的值相同時,slow的值是1還是其他值,如果是1,那么就代表n是快樂數,反之就不是快樂數。

//快慢指針
//將一個數替換為他們個位置上的數字的平方和
int Func(int n)
{int m=n;int sum=0;while(m){int x=m%10;sum+=x*x;m/=10;}return sum;
}
bool isHappy(int n) 
{int slow=n;int fast=Func(n);while(fast!=slow){slow=Func(slow);fast=Func(fast);fast=Func(fast);}return slow==1;
}

題目2:盛最多水的容器

方法一:暴力求解。這道題我們當然可以使用雙層循環求任意兩個區間中容器的體積,然后比較得到最大的容積。但是,這個思路雖然好想,時間復雜度卻太高了,無法通過題解。

方法二:雙指針法。我們知道,對于任意一個區間,容器的體積是由寬度和高度兩部分決定的,根據木桶效應,一個區間容器的高度有較小的高度決定。假設我們一開始將寬度拉到最大,即包含整個區間(區間范圍是? [0,heightsize-1]? ),算出這一部分的體積,然后再縮小寬度,依次去計算對應區間的體積并比較,然后就可以得到最大體積。我們應該如何縮小寬度才能達到找到最大體積的目的呢?我們知道,體積是由寬度和高度共同決定的,當我們縮小寬度時,如果還想讓體積變大,就一定要讓高度變大,所以對于區間的兩個端點,我們需要舍棄對應高度較小的那一個端點來縮小寬度。

結合上述思路我們來整理出這道題的算法步驟:

1.定義兩個指針right和left分別指向數組的最右邊和最左邊

2.計算left到right區間的容積

3.縮小區間范圍,如果left對應的高度小于right對應的高度,就讓left++;反之就讓right--

4.通過比較更新最大容積

現在我們就可以來寫代碼啦:

int maxArea(int* height, int heightSize) 
{int max=0;int left=0,right=heightSize-1;while(left<right){int h=height[left]<height[right]?height[left]:height[right];int v=h*(right-left);if(height[left]<height[right]){left++;}else{right--;}if(v>max){max=v;}}return max;
}

小結這一小節我們主要通過兩個算法題對應用雙指針的解題思路進行了講解。小伙伴們一定要自己在草稿紙或者電腦上多畫一下圖以深入理解算法的思想。

歡迎小伙伴們在評論區提出問題和討論!!!

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

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

相關文章

Oracle體系結構-數據文件(Data Files)

一、 數據文件的本質與原理 物理存儲的基石&#xff1a; 數據文件是 Oracle 數據庫在操作系統層面最核心、最基礎的物理存儲單元。它們是存儲在服務器硬盤&#xff08;或存儲陣列&#xff09;上的操作系統文件&#xff08;如 .dbf, .ora 擴展名常見&#xff0c;但非強制&#x…

【C++練習】18.C++求兩個整數的最小公倍數(LCM)

目錄C求兩個整數的最小公倍數(LCM)的方法方法一&#xff1a;利用最大公約數(GCD)計算代碼實現方法二&#xff1a;逐次增加法代碼實現方法三&#xff1a;質因數分解法代碼實現方法比較處理大數和特殊情況改進版GCD方法實現 C求兩個整數的最小公倍數(LCM)的方法 最小公倍數(LCM)是…

Linux網絡:應用層協議http

前言 雖然我們說&#xff0c;應用層協議是我們程序猿自己定的。但實際上,已經有大佬們定義了一些現成的,又非常好用的應用層協議,供我們直接參考使用.HTTP(超文本傳輸協議)就是其中之一。 我們之前已經學了UDP與TCP套接字的簡單使用&#xff0c;以及講解了進程間的各種關系&a…

ffmpeg推流測試

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、操作步驟1.測試12.測試2總結前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 環境信息&#xff1a; 攝像頭&#xff1a;usb攝像頭 &a…

Docker的使用及核心命令

文章目錄Docker基礎概念鏡像管理命令鏡像查看和搜索鏡像下載和刪除鏡像構建容器生命周期管理創建和啟動容器容器控制命令容器清理容器交互和調試進入容器文件操作日志和監控數據管理數據卷&#xff08;Volume&#xff09;綁定掛載網絡管理網絡基礎操作端口映射Dockerfile和Dock…

考研408計算機網絡第36題真題解析(2021-2023)

&#xff08;2023.36&#xff09;在使用 CSMA/CD 協議的環境中&#xff0c;使用截斷二進制指數退避算法&#xff0c;來選擇重傳時機&#xff0c;算法 有如下規定&#xff1a; &#xff08;1&#xff09;基本的退避時間為爭用期 2τ&#xff0c;假設某網絡具體的爭用期為 51.2us…

Asio C++ Library是用來做什么的

hriskohlhoff/asio 是由 Chris Kohlhoff 主導維護的開源 C 庫&#xff0c;專注于提供高效、跨平臺的異步 I/O 支持&#xff0c;廣泛應用于網絡編程、并發控制和高性能系統開發。 &#x1f4d8; 項目概述 項目名稱&#xff1a;Asio C Library 下載地址&#xff1a;https://down…

ac791的按鍵ad_channel

每次ad_channel這個參數都要給我一定的迷惑性&#xff0c;讓我以為這是通道的數量

機器人巡檢與巡邏的區別進行詳細講解和對比

機器人巡檢與巡邏的區別進行詳細講解和對比 盡管這兩個詞經常被混用&#xff0c;但在技術和應用層面上&#xff0c;它們有著本質的區別。核心區別在于&#xff1a;巡檢是“深度體檢”&#xff0c;而巡邏是“治安巡查”。 以下將從多個維度進行詳細講解和對比。 一、核心概念與目…

先進電機拓撲及控制算法介紹(3)——以“數據”驅動電機實現真正的無模型

1. 背景介紹 之前已經介紹過“無模型預測控制&#xff08;Model-Free Predictive Control/MFPC&#xff09;”中的“無模型預測電流控制&#xff08;Model-Free Predictive Current Control/MFPCC&#xff09;”&#xff0c;可參考下面知乎。 https://zhuanlan.zhihu.com/p/6…

C primer plus (第六版)第十一章 編程練習第5,6題

題目&#xff1a;5&#xff0e;設計并測試?個函數&#xff0c;搜索第1個函數形參指定的字符串&#xff0c;在其中查找第2個函數形參指定的字符?次出現的位置。如果成功&#xff0c;該函數返指向該字符的指針&#xff0c;如果在字符串中未找到指定字符&#xff0c;則返回空指針…

Altium Designer(AD)PCB絲印批量修改

目錄 1 Altium Designer(AD)PCB絲印的字體批量修改 1.1選中所有絲印 1.1.1選中一個絲印:鼠標左鍵點擊 1.1.2查找相似對象:鼠標右鍵或快捷鍵N 1.1.3如下圖所示絲印被全部選中 1.2絲印字體信息修改 1.2.1打開屬性面板——>位置/屬性/字體修改 1.2.2絲印字體修改 1.2.…

AI+華為HarmonyOS開發工具DevEco Studio詳細安裝指南

作者&#xff1a;長江支流 日期&#xff1a;2025-09-13 第一部分&#xff1a;AI工具使用 一、如何使用DeepSeek幫助自己的工作&#xff1f; &#xff08;一&#xff09;提示詞 為了與時俱進&#xff0c;充分利用最新技術、提高效率&#xff0c;采用AI生成部分材料&#xf…

【Ambari監控】— API請求邏輯梳理

附錄&#xff1a;完整內容和源代碼下載請參照 https://doc.janettr.com/ 一、前序章節回憶 我們在前面章節拆解了 Collector 的啟動過程&#xff0c;并定位了控制器 TimelineWebServices。 本節聚焦 Collector 對外暴露的 REST 服務&#xff0c;搭建「接口全景圖」。 二、接口…

論文閱讀 2025-9-13 論文閱讀隨心記

隨便記錄一下最近閱讀的幾篇論文 1. Does DINOv3 Set a New Medical Vision Standard? 第一章 動機 (Motivation) 自然圖像領域的成功范式&#xff1a;大型語言模型&#xff08;LLMs&#xff09;和視覺基礎模型&#xff08;如 DINO 系列&#xff09;證明&#xff0c;通過自監督…

Avalonia 基礎導航實現:從頁面切換到響應式交互全指南

在 Avalonia 開發中&#xff0c;導航功能是構建多頁面應用的核心需求。Avalonia 無需依賴第三方庫&#xff0c;僅通過內置控件與 MVVM 模式即可實現靈活的頁面切換。本文將以 “基礎導航” 為核心&#xff0c;從 ViewModel 與 View 設計、導航邏輯實現&#xff0c;到樣式美化與…

UniApp 分包異步化配置及組件引用解決方案

具體參考微信小程序文檔基礎能力 / 分包加載 / 分包異步化 一、分包頁面組件配置 在 UniApp 的pages.json中&#xff0c;為分包頁面&#xff08;或主包如 tabbar 頁面&#xff09;配置異步組件時&#xff0c;需同時設置usingComponents和componentPlaceholder&#xff1a; {&…

系統核心解析:深入操作系統內部機制——進程管理與控制指南(一)【進程/PCB】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

微論-神經網絡特征空間的動態聚集,對抗災難性遺忘的新范式

這是一個非常有趣且富有想象力的理論構想。受陀螺儀啟發&#xff0c;我將陀螺儀的“定軸性”與“進動性”原理引入神經網絡的特征空間&#xff0c;探討一種對抗災難性遺忘的新范式。---### **基于陀螺儀原理的神經網絡記憶鞏固理論探討**#### **引言&#xff1a;記憶的流失與穩…

鴻蒙審核問題——折疊屏展開態切換時,輸入框內容丟失

文章目錄背景解決歷程1、無意中發現了眉目2、確定問題原因3、解決辦法4、官方文檔5、總結背景 奇葩的事情年年有啊&#xff0c;今年特別多。這不今天又遇到了一個奇葩的問題。鴻蒙NextAPP上架AppGallery市場&#xff0c;審核拒了&#xff0c;說是折疊屏手機展開態切換時&#…