記錄一下頭條面試的慘敗題(遍歷回形數組)

      之前找工作的時候去頭條碰碰運氣,然後結果一面就慘敗回家。不得不說頭條的面試很有分量。一面小哥開場看了一下我的簡歷,然後直接就說那你做個題吧。然後現場寫了個回形數組,讓我寫個算法遍歷下。說實話本人算法 真的很水。也沒有 刻意去研究過。所以當場就涼涼,盡然給面試官很猥瑣的說,我能不能給你用快排排個序輸出不就有序了。然後面試官笑而不語搖搖頭。當時緊張加上思維混亂,總覺得用for循環加上遞歸能實現,但是苦於找不到遞歸出口。回來後研究了許久也沒研究明白這破玩意怎麼輸出。今天咬咬牙把這個坑填了。查了一些資料發現好多大佬都寫了具體實現。那我也不班門弄斧了。直接貼代碼上來吧。

先看看什麼是回形數組(誰想出來這麼個缺德玩意的......)

然後用二維數組弄一個這玩意。題目就是這個

		int attrs[][] = {
				{0 ,1 ,2 ,3 },
				{11,12,13,4 },
				{10,15,14,5 },
				{9 ,8 ,7 ,6 },
		};

給定一個n階數的回形數組,用代碼遍歷然後 有序輸出

public static void output(int attrs[][]) {
    int count = row*col;
	int i = 0;
	int j = 0;
	while(count>0) {
		//輸出上面的邊
		for(int k=1;k<col;k++) {
			System.out.print(attrs[i][j]+" ");
			count -=1;
			j++;
		}
		//輸出右邊的邊
		for(int k=1;k<row;k++) {
			System.out.print(attrs[i][j]+" ");
			count -=1;
			i++;
		}
		//輸出下面的邊
		for(int k=1;k<col;k++) {
			System.out.print(attrs[i][j]+" ");
			count -=1;
			j--;
		}
        //輸出左面的邊
		for(int k=1;k<row;k++) {
			System.out.print(attrs[i][j]+" ");
			count -=1;
			i--;
		}
        //遍歷起始位置前進
		i++;
		j++;
        //每次遍歷一環橫豎各少兩個邊,所以減去
		row = row-2;
		col = col-2;
	}
}

這樣就可以有序輸出了,網上大神真的多。我看了一大圈全是C++和C語言的實現, 我就用Java寫了一下,果然好使。真的屌。 發出來給大家共勉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章