藍橋杯—最少操作數

一.題目

分析:每次可以進行三次操作,求在n步操作后可以達到目標數的最小n,和最短路徑問題相似,分層遍歷加記憶化搜索防止時間復雜度過高,還需要減枝操作

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.Scanner;public class Text10 {public static int sum = 0;public static void main(String[] args) {Scanner scan = new Scanner(System.in);long x = scan.nextLong();int k = scan.nextInt();Long n = x;System.out.println(bfs(n,k));scan.close();}public static int bfs(Long n,int k){Queue<Long> queue = new LinkedList<>();Set<Long> visted = new HashSet<>();//記錄數組queue.add(n);//存入初始值Long res,tmp;while(!queue.isEmpty()){int cnt = queue.size();for(int i = 0;i<cnt;i++)//分層處理{res = queue.poll();if(res==k)return sum;if(res>k){queue.add(res - 1);if(res-1==k)    return sum + 1;continue;}Long[] arr = {res + 1,res - 1,res * 2};for(Long x:arr){if(x==k) return sum + 1;if(k>0&&!visted.contains(x)){queue.add(x);visted.add(x);}}}sum++;//每一層sum+1}return -1;}
}

二.總結

bfs算法求最短路徑問題時,需要記憶化搜搜

原因

1.迷宮:防止后來的路徑覆蓋最短路徑

2.本題:防止重復計算已經計算過的路徑,減少時間復雜度

本題需要大量減枝,因為每次操作變化小,這也是為什么不能用dfs的原因,dfs算法也可以求解,不過時間復雜度很高,遞歸太深入了,比如說1到10000會進行9999次遞歸,時間復雜度是指數級的

3.只有答案需要返回操作步驟數時才需要分層處理,比如求最短路徑就不需要分層處理,只需要返回路徑就可以,如果是需要知道走了幾步,那就需要分層處理記錄

三.錯誤總結

1.時間復雜度過高

沒有減枝,當當前數大于k時,只需要-1操作就行,沒有設置記憶數組,已經遍歷過的結果不需要再次遍歷,使用Hashset是因為它是哈希表結構,查詢快效率高

2.沒有思考清楚什么情況會返回-1

沒有返回-1的情況,題目陷阱

3.返回值錯誤

eg:

在這里如果沒有檢查res就可能會發生錯誤

假如說在第n層res-1的結果等于k,那么res-1就存儲在第85層,如果在這個位置前有一個值+1可以等于k那么返回來sum+1在86層,就導致結果錯誤,所以每次操作都需要立即檢查,沒檢查就會導致多一層搜索

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

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

相關文章

Linux內核NIC網卡驅動實戰案例分析

以下Linux 內核模塊實現了一個虛擬網絡設備驅動程序&#xff0c;其作用和意義如下&#xff1a; 1. 作用 &#xff08;1&#xff09;創建虛擬網絡設備對 驅動程序動態創建了兩個虛擬網絡設備&#xff08;nic_dev[0]和nic_dev[1]&#xff09;&#xff0c;模擬物理網卡的功能。這兩…

Trae初使用心得(Java后端)

1.前提 2025年3月3日&#xff0c;字節跳動正式官宣“中國首個 AI 原生集成開發環境&#xff08;AI IDE&#xff09;”Trae 國內版正式上線&#xff0c;由于之前項目的原因小編沒有及時的去體驗&#xff0c;這幾日專門抽空去體驗了一下感覺還算可以。 2.特點 Trade重在可以白嫖…

[項目]基于FreeRTOS的STM32四軸飛行器: 十二.角速度加速度濾波

基于FreeRTOS的STM32四軸飛行器: 十二.濾波 一.濾波介紹二.對角速度進行一階低通濾波三.對加速度進行卡爾曼濾波 一.濾波介紹 模擬信號濾波&#xff1a; 最常用的濾波方法可以在信號和地之間并聯一個電容&#xff0c;因為電容通交隔直&#xff0c;信號突變會給電容充電&#x…

UNIX網絡編程筆記:TCP、UDP、SCTP編程的區別

一、核心特性對比 特性TCPUDPSCTP連接方式面向連接&#xff08;三次握手&#xff09;無連接面向連接&#xff08;四次握手&#xff09;可靠性可靠傳輸&#xff08;重傳、確認機制&#xff09;不可靠傳輸可靠傳輸&#xff08;多路徑冗余&#xff09;傳輸單位字節流&#xff08;…

Python爬蟲異常處理:自動跳過無效URL

爬蟲在運行過程中常常會遇到各種異常情況&#xff0c;其中無效URL的出現是較為常見的問題之一。無效URL可能導致爬蟲程序崩潰或陷入無限等待狀態&#xff0c;嚴重影響爬蟲的穩定性和效率。因此&#xff0c;掌握如何在Python爬蟲中自動跳過無效URL的異常處理技巧&#xff0c;對于…

C++語法學習的主要內容

科技特長生方向&#xff0c;主要學習的內容為 一&#xff0c;《C語法》 二&#xff0c;《數據結構》 三&#xff0c;《算法》 四&#xff0c;《計算機基礎知識》 五&#xff0c;《初高中的數學知識》 其中&#xff0c;《C語法》學習的主要內容如下: 1,cout輸出語句和鍵盤…

3、孿生網絡/連體網絡(Siamese Network)

目的: 用Siamese Network (孿生網絡) 解決Few-shot learning (小樣本學習)。 Siamese Network并不是Meta Learning最好的方法, 但是通過學習Siamese Network,非常有助于理解其他Meta Learning算法。 這里介紹了兩種方法:Siamese Network (孿生網絡)、Trplet Loss Siam…

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.2.1從零編寫類GPT-2模型架構(規劃模塊與代碼組織)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 2.2.1 從零編寫類GPT-2模型架構(規劃模塊與代碼組織)1. 模型架構設計規劃1.1 架構核心組件2. 模塊化設計實現2.1 輸入處理模塊2.1.1 分詞與嵌入2.1.2 位置編碼2.2 解碼塊設計2.2.1 多頭注意力子層2.2.…

消息隊列(Kafka及RocketMQ等對比聯系)

目錄 消息隊列 一、為什么使用消息隊列&#xff1f;消息隊列有什么優點/缺點&#xff1f;介紹下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么優點缺點&#xff0c;如何取舍&#xff1f; 1.公司業務場景是什么&#xff0c;這個業務場景有什么挑戰&#xff0c;如果不用MQ有什么麻…

Android 13系統定制實戰:基于系統屬性的音量鍵動態屏蔽方案解析

1. 需求背景與實現原理 在Android 13系統定制化開發中&#xff0c;需根據設備場景動態屏蔽音量鍵&#xff08;VOLUME_UP/VOLUME_DOWN&#xff09;功能。其核心訴求是通過系統屬性&#xff08;persist.sys.roco.volumekey.enable&#xff09;控制音量鍵的響應邏輯&#xff0c;確…

解鎖DeepSeek潛能:Docker+Ollama打造本地大模型部署新范式

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、什么是Docker 2、什么是Ollama 二、準備工作 1、操…

uv - Guides 指南 [官方文檔翻譯]

文章目錄 Guides 指南概述安裝 Python入門安裝特定版本重新安裝 Python查看 Python 安裝自動 Python 下載使用現有的 Python 版本 運行腳本在沒有依賴的情況下運行腳本運行帶有依賴的腳本創建一個Python腳本聲明腳本依賴使用替代包索引鎖定依賴提高可重復性使用不同的 Python 版…

根據模板將 Excel 明細數據生成 PDF 文檔 | PDF實現郵件合并功能

在日常辦公中&#xff0c;我們常常會面臨這樣的需求&#xff1a;依據特定的模板&#xff0c;把 Excel 里的每一條數據轉化為單獨的 PDF 文檔&#xff0c;且這些 PDF 文檔中的部分內容會根據 Excel 數據動態變化。這一功能不僅能高效完成任務&#xff0c;還支持圖片的動態替換&a…

apache安裝腳本使用shell建立

注意防火墻&#xff0c;yum&#xff0c;網絡連接等 以下是具體的apache安裝腳本 #!/bin/bash # Set Apache version to install ## author: yuan # 檢查外網連接 echo "檢查外網連接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; …

wordpress主題使用中常見錯誤匯總

在WordPress主題的使用過程中&#xff0c;開發者可能會遇到各種問題。下面是一些常見錯誤的匯總&#xff0c;并給出了相應的解決方法。 一、主題安裝與激活錯誤 無法激活主題&#xff1a;檢查主題文件是否完整&#xff0c;以及是否符合WordPress的主題規范。 激活主題后出現…

如何設計一個訂單號生成服務?應該考慮那些問題?

如何設計一個訂單號生成服務&#xff1f;應該考慮那些問題&#xff1f; description: 在高并發的電商系統中&#xff0c;生成全局唯一的訂單編號是關鍵。本文探討了幾種常見的訂單編號生成方法&#xff0c;包括UUID、數據庫自增、雪花算法和基于Redis的分布式組件&#xff0c;并…

Springboot 集成 Flowable 6.8.0

1. 創建 Spring Boot 項目 通過 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;創建一個基礎的 Spring Boot 項目&#xff0c;添加以下依賴&#xff1a; Spring WebSpring Data JPAMySQL DriverLombok&#xff08;可選&#xff0c;用于簡化代碼&#x…

《TCP/IP網絡編程》學習筆記 | Chapter 22:重疊 I/O 模型

《TCP/IP網絡編程》學習筆記 | Chapter 22&#xff1a;重疊 I/O 模型 《TCP/IP網絡編程》學習筆記 | Chapter 22&#xff1a;重疊 I/O 模型理解重疊 I/O 模型重疊 I/O本章討論的重疊 I/O 的重點不在于 I/O 創建重疊 I/O 套接字執行重疊 I/O 的 WSASend 函數進行重疊 I/O 的 WSA…

搭建Redis哨兵集群

停掉現有的redis集群 因為這篇文章我是在 搭建完redis主從集群之后寫的&#xff0c;如果要是沒有搭建過這些&#xff0c;可以直接略過。要是從我上一篇 搭建redis主從集群過來的&#xff0c;可以執行下。 docker compose down 查找下redis相關進程 ps -ef | grep redis 可以看…

MySQL中,聚集索引和非聚集索引到底有什么區別?

文章目錄 1. 數據存儲方式2. 索引結構3. 查詢效率4. 索引數量5. 適用場景6. 示例說明7. 總結 在MySQL中&#xff0c;聚集索引和非聚集索引&#xff08;也稱二級索引&#xff09;的區別主要體現在數據存儲方式、索引結構和查詢效率等方面。以下是詳細對比&#xff1a; 1. 數據存…