winng的入坑題目記錄

大概是一個風(fēng)高氣爽的一天,我在實習(xí)公司莫得事干偷了本Python深度學(xué)習(xí)看的時候,旁邊的程序猿小哥哥大概是看我太無聊?反正在微信里丟給我一個網(wǎng)站——Lintcode。

說實話我很喜歡編程,雖然對循環(huán)和函數(shù)間數(shù)據(jù)傳遞一直傻fufu的,但是出于對編程的喜愛,在高三的時候偷偷摸摸發(fā)憤圖強(qiáng)自學(xué)了大一上班學(xué)期的C語言一半的內(nèi)容……大概,還是挺不容易的?但是可能是跟acm無緣,也可能機(jī)遇不夠,沒有白胡子編程爺爺拉著我傳道受業(yè)解惑,直到現(xiàn)在開始漸漸明白要學(xué)什么了,額,或者說是對自己想要提高編程能力有了更清晰的自主意識,才恍然發(fā)覺自己太菜了。(所以繼續(xù)發(fā)憤圖強(qiáng)叭23333)

跑題跑題,說回小哥哥給我發(fā)的這道題。(這題怎么排版都丑,將就著看吧)

433. 島嶼的個數(shù)

  • 描述:
    給一個01矩陣,求不同的島嶼的個數(shù)。0代表海,1代表島,如果兩個1相鄰,那么這兩個1屬于同一個島。我們只考慮上下左右為相鄰。
  • 樣例:
    在矩陣
    [[1, 1, 0, 0, 0],
    [0, 1, 0, 0, 1],
    [0, 0, 0, 1, 1],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1]]
    中有 3 個島

然后我肝了很久……頭發(fā)少了不少(大概因為周末出去剪了個頭?)……

提交時間 我的代碼 面試真題 運行時間 語言
37 分鐘前 Accepted 島嶼的個數(shù) 50 ms C++
40 分鐘前 Accepted 島嶼的個數(shù) 151 ms C++
42 分鐘前 Wrong Answer 島嶼的個數(shù) 151 ms C++
44 分鐘前 Wrong Answer 島嶼的個數(shù) 151 ms C++
1 小時前 Running Error 島嶼的個數(shù) 151 ms C++
1 小時前 Running Error 島嶼的個數(shù) 151 ms C++
1 小時前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
1 天前 Running Error 島嶼的個數(shù) 151 ms C++
5 天前 Wrong Answer 島嶼的個數(shù) 50 ms C++
5 天前 Wrong Answer 島嶼的個數(shù) 50 ms C++
5 天前 Wrong Answer 島嶼的個數(shù) 50 ms C++
5 天前 Running Error 島嶼的個數(shù) 151 ms C++

第一天摸到這個題我很傻很天真地發(fā)現(xiàn)我不知道這個函數(shù)怎么傳參的,瞅了半天的vector,那種仿佛喚醒了塵封的記憶的感覺23333,畢竟是半年前學(xué)的,學(xué)完就沒怎么用的東西呢~然后會用了vector也不會做題,無奈去肝了幾道入門級的題。(沒錯就是winng的一月題目2333)

做了幾道題,感覺自己ok了,懂了這個成員函數(shù)怎么傳參,我思量了一下這道題,感覺應(yīng)該循環(huán)嵌套然后計數(shù)。

然后做出了5天前的3個Wrong Answer/捂臉

苦思冥想,明白了程序哪里有問題,然后換了遞歸的算法打算大俠重新來過。然后發(fā)現(xiàn)自己不會傳參嚶嚶嚶嚶嚶嚶嚶嚶嚶嚶(事實上最后我也沒傳參)。于是繼續(xù)刷題深造,winng的一月題目就此新鮮出爐(當(dāng)然當(dāng)時并沒整理)。

周末社會實踐,碰到了競賽大佬,講之,大佬為我指點了一波迷津:“你這個應(yīng)該用隊列做啊~”,但是當(dāng)時遞歸歸得很開心的我并不理解大佬的深意,只是又覺得自己ok了,沒曾想測試程序都運不行,更不必說上傳測試了。

然后我認(rèn)清自己傳不好參的事實。當(dāng)然了,主要是做了別的題發(fā)現(xiàn)遞歸的確跟大佬說的那樣容易炸裂……于是一邊再繼續(xù)刷題深造,刷好了三道二月一周題目(請問你這個月咋分的/捂臉)一邊開始著手摸索queue的算法。

然后做出了昨天的一連串Running Error,過去一周的平均提交次數(shù)3->7

當(dāng)然了,昨天寫好了所有的算法,只剩debug,直到今天1小時前我終于de完了,感動得無以復(fù)加,恨不能奔走相告,然額我要是真的去大街上奔走相告會被抓起來的,所以只能記錄一下以抒發(fā)我的胸中郁結(jié)之氣~~~

代碼呢最后就是這樣(把cout的測試數(shù)據(jù)刪掉運行時間從151ms蹭地變成50ms):

#include<queue>
class Solution {
public:
    /**
     * @param grid: a boolean 2D matrix
     * @return: an integer
     */
    int numIslands(vector<vector<bool>> &grid) {
        // write your code here
        if (grid.empty()){
            return 0;
        }
        int num=0,now,x,y;
        int m=grid.size();
        int n=grid[0].size();
        int a[m*n]={0};
        queue<int> q;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(!a[i*n+j]&&grid[i][j]){
                    a[i*n+j]=1;
                    q.push(i*n+j);
                    num++;
                    while(!q.empty())
                    {
                        now=q.front();
                        x=now/n;
                        y=now%n;
                        if(x!=0&&!a[(x-1)*n+y]&&grid[x-1][y]){
                            a[(x-1)*n+y]=1;
                            q.push((x-1)*n+y);
                        }
                        if(x!=m-1&&!a[(x+1)*n+y]&&grid[x+1][y]){
                            a[(x+1)*n+y]=1;
                            q.push((x+1)*n+y);
                        }
                        if(y!=0&&!a[x*n+y-1]&&grid[x][y-1]){
                            a[x*n+y-1]=1;
                            q.push(x*n+y-1);
                        }
                        if(y!=n-1&&!a[x*n+y+1]&&grid[x][y+1]){
                            a[x*n+y+1]=1;
                            q.push(x*n+y+1);
                        }
                        q.pop();
                    }
                }
            }
        }
        return num;
    }
};
  • 一開始想用vector存走過的圖,存一個二維數(shù)組,后來發(fā)現(xiàn)也不好調(diào)用數(shù)組的兩個參數(shù)……后來又想用結(jié)構(gòu)體還是咋著,最后我發(fā)現(xiàn)這還是一個數(shù)學(xué)問題……算就好了。
  • 最大的bug是m和n弄反了,后來改了兩遍
  • 另外就是四個if之前不小心寫成了if-elseif-elseif-elseif……

總之是寫完了,我可以繼續(xù)看Python的深度學(xué)習(xí)了QAQ
深度學(xué)習(xí):謝謝你還記得我: (
我:qqqqqvq

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容