刷題記錄--算法--簡單

第一題

2582. 遞枕頭

已解答

簡單

相關標簽

相關企業

提示

n?個人站成一排,按從?1?到?n?編號。

最初,排在隊首的第一個人拿著一個枕頭。每秒鐘,拿著枕頭的人會將枕頭傳遞給隊伍中的下一個人。一旦枕頭到達隊首或隊尾,傳遞方向就會改變,隊伍會繼續沿相反方向傳遞枕頭。

  • 例如,當枕頭到達第?n?個人時,TA 會將枕頭傳遞給第?n - 1?個人,然后傳遞給第?n - 2?個人,依此類推。

給你兩個正整數?n?和?time?,返回?time?秒后拿著枕頭的人的編號。

示例 1:

輸入:n = 4, time = 5
輸出:2
解釋:隊伍中枕頭的傳遞情況為:1 -> 2 -> 3 -> 4 -> 3 -> 2 。
5 秒后,枕頭傳遞到第 2 個人手中。

示例 2:

輸入:n = 3, time = 2
輸出:3
解釋:隊伍中枕頭的傳遞情況為:1 -> 2 -> 3 。
2 秒后,枕頭傳遞到第 3 個人手中。

分析思路:

題目有兩個參數time 與n

先分析time參數,有兩種可能為0和不為0

time為0,沒有時間,不計算后面的數。

time不為0,有時間,需要計算后面的數。

再分析n參數,從題目已知有兩種可能n>1和n<1

n>1,數據會隨time的變化而變化

n<=1,數據不會隨time的變化而變化

最后分析time與n的關系

time與n有三種關系

time>n,會發生往復計數的情況。

time=n,會發生往復計數的情況,但結果一定是n-1啦。

time<n,不會發生往復計數的情況。

至此可以得到第一種解決方案

第一種解決方案數數法

按照先從1開始向右計數,到達n時調轉方向向左計數的方法,這種方法不需要考慮time為0的情況,需要屏蔽n為0的情況,需要屏蔽n<=1的情況。

設置一個以time為參數的while循環,當time為0時退出循環,設置flag表明方向,1為向右,2為向左。設置i作為計數參數,程序開始時i為1向右計數,當i等于n時,flag變為-1,i向左計數。

需要注意的是,把n<2剔除。

class Solution {
public:int passThePillow(int n, int time){int i=1;int flag=1;if(n<2){i=n;}else{while(time){if(flag==1){++i;if(i==n){flag=-1;}}else if(flag==-1){--i;if(i==1){flag=1;}}--time;}}return i;}
};

但是第一種思路很挫,非常挫,特別挫,作為代碼狗,怎么能看得上這種思路呢,這種屎山代碼呢,而且還沒用到分析三,相當于剛才的分析白分析啦,不能忍啊,凸(艸皿艸 )。

第二種思路 除余法(廚余垃圾),這種方法也很垃圾

除余法的思路來自于在有限的線段下,除法的結果代表需要往復的次數,余的結果代表他還要走幾次,舉個栗子。

n=4,time=5

注意一下這里,time=5的意思是從5開始,走到0為止,體現在i上,是i要在1之后走出5步。上面的圖表現出time=5時走出了一個往復,用除法體現5/3=1(這里必須是除3也就是n-1,因為向右前進時i只走了三步),剩下的兩部5%3=2,所以n=4,time=5時,i走了一個往復,先向右走到4,然后調頭走到2,這里的5/3=1的1表示的i走完一個全程(全程指的是1到4,或者4到1,不管方向,總之1代表走完一個全程,就是這樣凸(艸皿艸 )這特么的這么難寫,凸(艸皿艸 )啊);

上面寫了一段,總結一下就是5/3=1表示i走完一段全程,5%3=2表示走完全程之后再走兩步。

確定上面的以后,需要判斷方向,以5/3為例,走完一個全程,需要調頭,這時候的方向是向左的。所以不能被2整除的此時是向左。

接下來以7/3為例

7/3等于2,此時已經走完兩個全程,方向向右。

接下來的余就簡單啦,當(time/(n-1))%2==0時,向右走,此時只需要1+time%(n-1),相反(time/(n-1))%2!=0時向左走,用n-time%(n-1)就好了。

上面是time>n 的情況,接下來看看time=n的情況。

time=n表示走完一個全程多走一步,實際上也是一個全程以上的問題,可以歸類到上面。

time<n這是一個沒有走完全程的情況,不走完全程時,方向是向右的,那么完全可以帶入多個全程的情況,(time/(n-1))%2==0。

接下來看看n,n分為<=1和>1兩種情況,n<=1這種情況需要剔除,因為題目給的數從2開始,這個就不寫了,也就一個if的事。

再接下來,就是time為0的情況,emmmmmm。。。。。time為0時,完全不影響i=1+time%(n-1);i=n-time%(n-1);計算的結果,所以這個題目的代碼是

class Solution {
public:int passThePillow(int n, int time) {int i=0;if((time/(n-1))%2!=0){i=n-time%(n-1);}else if((time/(n-1))%2==0){i=1+time%(n-1);}return i;}
};

不用循環,但是懶得想,廚余垃圾啊?

最后看一下官方題解,目前么想明白

我們注意到每經過 2×(n?1)2 \times (n - 1)2×(n?1) 的時間,枕頭會被傳遞回起點,所以我們可以直接用 time\textit{time}time 對 2×(n?1)2 \times (n - 1)2×(n?1) 取模求余數。

如果 time<n\textit{time} < ntime<n,枕頭沒有傳遞到隊尾,傳遞到 time+1\textit{time} + 1time+1。
如果 time≥n\textit{time} \ge ntime≥n,枕頭已經傳遞過隊尾,傳遞到 n?(time?(n?1))=n×2?time?1n - (\textit{time} - (n - 1)) = n \times 2 - \textit{time} - 1n?(time?(n?1))=n×2?time?1。

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

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

相關文章

高防IP是什么?有什么優勢?

隨著互聯網的普及和快速發展&#xff0c;網絡安全問題日益突出。在眾多安全問題中&#xff0c;DDOS攻擊是一種常見的攻擊手段&#xff0c;它通過發送大量的無效或低效請求&#xff0c;使得目標服務器無法響應正常用戶的請求&#xff0c;從而造成服務不可用的情況。為了解決這個…

部署zabbix

源碼下載地址&#xff1a; Download Zabbix sources nginx: download 防火墻和selinux都需要關閉 1、部署監控服務器 1&#xff09;安裝LNMP環境 Zabbix監控管理控制臺需要通過Web頁面展示出來&#xff0c;并且還需要使用MySQL來存儲數據&#xff0c;因此需要先為Zabbix準備基礎…

vue的el

類型&#xff1a;string | Element 限制&#xff1a; 只在用 new 創建實例時生效。 詳細&#xff1a; 提供一個在頁面上已存在的 DOM 元素作為 Vue 實例的掛載目標。可以是 CSS 選擇器&#xff0c;也可以是一個 HTMLElement 實例。 在實例掛載之后&#xff0c;元素可以用 vm.…

Java創建線程有哪幾種方式?

Java創建線程有哪幾種方式&#xff1f; 在 Java 中&#xff0c;創建線程有多種方式&#xff0c;主要包括使用 Thread 類和實現 Runnable 接口。以下是幾種常見的創建線程的方式&#xff1a; 繼承 Thread 類&#xff1a; 通過繼承 Thread 類并重寫 run 方法來創建線程。 class …

如何使用eXtplorer+cpolar內網穿透搭建個人云存儲實現公網訪問

文章目錄 1. 前言2. eXtplorer網站搭建2.1 eXtplorer下載和安裝2.2 eXtplorer網頁測試2.3 cpolar的安裝和注冊 3.本地網頁發布3.1.Cpolar云端設置3.2.Cpolar本地設置 4.公網訪問測試5.結語 1. 前言 通過互聯網傳輸文件&#xff0c;是互聯網最重要的應用之一&#xff0c;無論是…

關于互聯網安全方面需要了解的一些知識

關于互聯網安全方面需要了解的一些知識 文章目錄 關于互聯網安全方面需要了解的一些知識一、資產掃描二、漏洞掃描三、滲透測試四、POC五、Exp六、代碼規范七、函數命名八、注釋怎么寫 一、資產掃描 資產掃描是一種通過掃描網絡或系統中所有設備、應用程序和服務&#xff0c;識…

PHP escapeshellarg()+escapeshellcmd()繞過

文章目錄 函數利用escapeshellarg()函數escapeshellcmd()函數 exp執行原理攻擊面例題 [BUUCTF 2018]Online Tool例題 [網鼎杯 2020 朱雀組]Nmap 函數利用 escapeshellarg()函數 單引號 ()&#xff1a;轉義為 \。 雙引號 (")&#xff1a;轉義為 \"。 反斜杠 (\)&…

HTTP不同場景下的通信過程和用戶上網認證過程分析

目錄 HTTP不同場景的通信過程 HTTP正常交互過程 HTTP透明加速傳輸過程 HTTP代理服務器場景下交互過程 通過AC對上網用戶不同場景的認證過程 AC上網認證正常交互過程 通過Cookie實現免認證交互過程 代理服務器場景下HTTP密碼認證交互過程 HTTP不同場景的通信過程 HTTP、…

專業130+總分400+云南大學通信847專業基礎綜考研經驗(原專業課827)

今年專業130總分400云南大學通信上岸&#xff0c;整體考研感覺還是比較滿意&#xff0c;期間也付出了很多心血&#xff0c;走過彎路&#xff0c;下面分享一下這一年考研得失&#xff0c;希望大家可以從中有所借鑒。 先說明我在考研報名前更換成云南大學的理由&#xff1a;&…

谷歌正式發布最強 AI 模型 Gemini

2023年12月6日&#xff0c;谷歌公司宣布推出其被認為是規模最大、功能最強大的人工智能模型 Gemini。 Gemini將分為三個不同的套件&#xff1a;Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被認為具備最強大的能力&#xff0c;Gemini Pro則可擴展至多任務&#x…

xilinx原語詳解及仿真——ODDR

ODDR位于OLOGIC中&#xff0c;可以把單沿傳輸的數據轉換為雙沿傳輸的數據&#xff0c; 在講解ODDR功能之前&#xff0c;需要先了解OLOGIC的結構及功能。 1、OLOGIC OLOGIC塊位于IOB的內側&#xff0c;FPGA內部信號想要輸出到管腳&#xff0c;都必須經過OLOGIC。OLOGIC資源的類…

CleanMyMac4.16中文最新版本下載

當很多人還在為電腦運行緩慢、工作問題不能快速得到解決而煩惱的時候&#xff0c;我已經使用過了多款系統清理工具&#xff0c;并找到了最適合我的那一款。我的電腦是超耐用的Mac book&#xff0c;接下來給大家介紹三種在眾多蘋果電腦清理軟件的排名較高的軟件。 一、Maintena…

【ET8】0.ET8入門-ET框架介紹

ET8 新特性 多線程多進程架構,架構更加靈活強大&#xff0c;多線程設計詳細內容請看多線程設計課程抽象出纖程(Fiber)的概念&#xff0c;類似erlang的進程&#xff0c;非常輕松的創建多個纖程&#xff0c;利用多核&#xff0c;仍然是單線程開發的體驗纖程調度: 主線程&#xf…

首次面試經歷(忘指導)當我在簡歷上寫了蒼穹外賣,瑞吉外賣時……

&#x1f308;鍵盤敲爛&#xff0c;年薪30萬&#x1f308; 個人簡介: 大三在校生&#xff0c;二本院校&#xff0c;專業&#xff1a;信息管理與信息系統 面試崗位&#xff1a; java開發實習生 投”簡歷“ 臨近大三寒假&#xff0c;很早就有實習想法的我&#xff0c;對12月做…

一篇文章了解JDK的前世今生

我們每天都在開發Java,每天都在使用JDK,那么我們了解JDK的發展史嗎,這篇文章將帶你深入了解JDK的發展史。 JDK(Java Development Kit)是Java開發者工具包,是用于編寫Java程序和運行Java程序的軟件開發工具集。自從1995年Java語言首次發布以來,JDK已經經歷了數十年的發展…

python打開相機,用鼠標左鍵框選矩形區域,支持一次框選多個矩形區域,通過鼠標右標清除上一次畫的矩形。

方案一 import cv2# Global variables rectangles [] current_rectangle [] drawing False# Mouse callback function def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event cv2.EVENT_LBUTTONDOWN:drawing Truecurren…

C語言——常用庫函數

C語言——常用庫函數 memcmp int my_memcmp(char* str1,char* str2,int num) {while(num--){if(*str1>*str2){return 1;}else if(*str1<*str2){return -1;}else{str1;str2;}}return 0; }memcpy void* my_memcpy(void *str1,void *str2,int size) {int *p1str1;int *p2…

Linux數據庫Mysql增刪改查

從安裝數據庫到增刪改查 apt install mariadb-serverUndefined 安裝好后初始化 mysql_secure_installationUndefined 查 查詢現有的庫 show databases;SQL 進入庫 use mysql;Perl 查詢表 show tables;SQL 查詢表結構 desc mysql;SQL 查詢表內容 select * from my…

深度學習TensorFlow2基礎知識學習后半部分

介紹幾個重要操作&#xff1a; 1.范數 a tf.fill([1,2], value2.) b tf.norm(a)# 二范數#第二種計算方法 # 計算驗證 a tf.square(a) log("a的平方:", a) a tf.reduce_sum(a) log("a平方后的和:", a) b tf.sqrt(a) log("a平方和后開根號:"…

NVIDIA與 Sparkfun 的合作伙伴在 Hackster.io 上發起了人工智能創新挑戰賽,喊你來參加!

NVIDIA與 Sparkfun 的合作伙伴在 Hackster.io 上發起了人工智能創新挑戰賽&#xff0c;喊你來參加&#xff01; 本次競賽的目標旨在吸引開發者社區在 NVIDIA Jetson Orin 平臺上為邊緣構建生成式 AI 應用程序和模型&#xff0c;希望通過本次比賽提高人們對新 Jetson 生成式 AI…