劍指OFFER之陣列篇

2021-10-08 09:21:09 字數 1783 閱讀 2500

「根據b站up主土妹的方法,像以前高中初中複習一樣來鍛鍊自己做演算法題的能力!!!把劍指offer的題目作為例題,系統學習乙個知識點之後,再去做leetcode的題目。」

「加油!」

@[toc](目錄)

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。 例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機械人能夠達到多少個格仔?

關公面前耍大刀

感覺真的不是很難的題目。可是一開始找不到一種很好的方法來寫,後來經過幾次除錯,下面這段**case通過率還是12.5%…自我感覺良好,不知道問題出在**。!

public class solution 

while(i<=rows )

i++;

}while(j<=cols)

j++;

}for(i=0;i<=row1;i++)

}return totalsum;

}public int calnumbsum(int i)

return sum;

}}

反思: 你的想法從根本性上有錯誤。例如,當k=10的時候,i(或j)=19,就中斷了,那28,37呢?也就是可行區間不一定是連續的!

檢視了一下講解之後,發現別人是用dfs,bfs來解決的!呃,我想的太簡單了?可是仔細畫圖之後,發現我的解法應該也是可以的!!!不過後來除錯之後發現自己的**有乙個大bug!!!

while(i<=rows )            

i++;

}while(j<=cols)

j++;

}for(i=0;i<=row1;i++)

這段**中的

if (sum>threshold)
完全有可能不執行的!!!此時row1的值並沒有被改變,還是原來的0!!!

關公耍大刀

class solution 

public int dfs(int i,int j)

visited[i][j] = true;

return 1 + dfs(i+1,j) + dfs(i,j+1);

}public int count(int i,int j)

while(j != 0)

return sum;

}//bfs

public int movingcount(int m, int n, int k) );//存放陣列,第一位是i,第兩位是j

int ans = 0;

while(queue.size() >0));

queue.offer(new int);

}return ans;

}public int count(int i,int j)

while(j != 0)

return sum;

}}

注意邊界點有3種情況:

1.越界了(i>m || j>n)

2.sumi+sumj > k

3.已經訪問過了

總結:1.看到這種什麼向上,向下的題目要應該要想到遍歷解法。

2.總結一下dfs和bfs的解法模板。

3.完成閱讀後刪)

劍指offer之陣列查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。完成 coding utf 8 class solution array 二維列表 deffind self,target,ar...

劍指offer 陣列

資料是最簡單的資料結構,它佔據一塊連續的記憶體並按照順序儲存資料。建立陣列時,首先指點陣列的容量大小,然後根據大小分配記憶體。缺點 空間效率不高。經常有空閒的區域滅有得到充分利用。優點 時間效率很高。可以根據時間效率高的特點,來實現簡單的雜湊表 把陣列的下標設為雜湊表的鍵值,陣列中的每乙個數字設為雜...

劍指offer 陣列

public class 03 陣列中的重複數字 swap number,number i i return 1 交換 public void swap int number,int i,int j public class 03 陣列中的重複數字 return 1 public intfindre...