日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第一次刷Leetcode,为什么耗费很多时间

發布時間:2024/4/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一次刷Leetcode,为什么耗费很多时间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Leetcode第2題思考過程分析:耗費的時間與思考過程

1、 審題耗費了很長時間,英文看不懂。兩個單鏈表代表了兩個整數,整數逆序,(2 -> 4 -> 3) + (5 -> 6 -> 4),(2 -> 4 -> 3)表示342,另一個數是456,和為708;巧合的是243+564=807,這個巧合不能用來解題。

2、 解題的初步思路是逆序鏈表,將數字存在普通數組里(這需要動態數組,因為輸入的鏈表長度未定),然后相加,再把sum分解為各位數字,逆序存入單鏈表(這一步令我困惑的是對兩個鏈表的操作有重復的,想著能不能簡化,其實順序訪問鏈表存入數組是可行的)。這個時候我已有的知識是:sum%10這樣的操作可以得到個位數。

3、 思考ListNode* l1是如何存這些數字的,l1是不是為空的頭指針。其實第一個節點就存了(2 -> 4 -> 3)的2。

注意鏈表里有個函數,所以new ListNode(n)可以初始化一個節點,next置為NULL

4、 下面是代碼各部分當時的思考分析

0:考慮鏈表有沒有頭指針,(2 -> 4 -> 3),l1節點存的2;

1:想著declare一個ListNode指針有兩種寫法

2:順序遍歷鏈表,不用new的數組,vector添加元素有push_back,想了下有沒有push_front,vector為了效率,不支持,又考慮用insert操作。

4:從數字轉換為int,vector存的順序為(2 -> 4 -> 3),用正向iterator首先得到低位2,但用num1=num1*10+*it迭代需要先從3開始,由此用reverse_iterator.

步驟2和4因為有兩個鏈表,需要重復這兩步,考慮過如何簡化,又把2考慮為鏈表逆序,不用vector,只用指針操作,其實多想了

? 5:對和需要分解為各位數字,并用創建的新鏈表接收。考慮了while條件為numSum!=0,

??該如何寫循環語句,是用尾插法還是頭插法,還把newSum=newSum/10寫成newSum=newSum%10。

第五步耗費了大量時間,總是想不清楚,感覺很混亂,因為并沒有訪問鏈表時p=p->next這種現成的語句。

3、原本寫成int,submit報錯如下:測試 [9,1999999999]不通過,得到的結果很奇怪。

Num2的值為1410065399,不是應該為9999999991嗎?為了檢測程序中的錯誤,添加了很多cout語句。看4部分代碼,沒錯啊。其實問題不是出在4,而是整形溢出了,查了int最大值,比9999999991小。把num1和num2改為long型的,又遇到了錯誤,這個時候我才意識到test case中有大數,連long long都裝不下。需要用大數計算。

審題花費時間,然后是想出整體解決思路,實現整體思路中的步驟,每個步驟可能有多種寫法(這是個廣度搜索過程),前步驟又影響后步驟(這是個深度搜索思考過程,如果進行不下去了,會回到某點),如果遇到想不清細節的部分就會很耗時間。代碼需要考慮整體,而腦力又只夠思考局部。

?

轉載于:https://www.cnblogs.com/hchacha/p/7302663.html

總結

以上是生活随笔為你收集整理的第一次刷Leetcode,为什么耗费很多时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。