今天在練習(xí)算法時(shí)言蛇,有一個(gè)用二分法查找一個(gè)從上之下遞增、從左至右遞增的二維數(shù)組里是否有某一個(gè)數(shù)宵距,寫出傳入一個(gè)這樣的數(shù)組和一個(gè)數(shù)字判斷是否這個(gè)數(shù)字在這個(gè)數(shù)組的函數(shù)腊尚。
好啦,相信有不少人做過這個(gè)題目满哪。思路就是從左下角開始判斷婿斥,如果目標(biāo)數(shù)小劝篷,就向上走一格(因?yàn)樯厦娴谋认旅嫘。┟袼蓿绻繕?biāo)數(shù)大娇妓,就向右走一格(因?yàn)橛疫叡茸筮叴螅_@個(gè)思路一出活鹰,我頓時(shí)自信滿滿才思泉涌哈恰,蹭蹭寫好點(diǎn)擊提交,總是報(bào)錯(cuò)志群。如下是我一開始寫的代碼
public class Solution {
public boolean Find(int [][] array,int target) {
int m = array.length;
int n = array[0].length;
int x = m-1,y = 0;
while(x>=0 && y < n){
if (target < array[x][y]){
x--;
}
if (target > array[x][y]){
y++;
}
if (target == array[x][y]) {
return true;
}
}
return false;
}
}
報(bào)錯(cuò)因?yàn)橄聵?biāo)越界了
我愣是皺眉查看代碼三分鐘着绷,沒有看出來為什么。后來搜一搜大家的答案锌云,才恍然大悟
原來應(yīng)該這樣寫
public class Solution {
public boolean Find(int [][] array,int target) {
int m = array.length;
int n = array[0].length;
int x = m-1,y = 0;
while(x>=0 && y < n){
if (target < array[x][y]){
x--;
}
else if (target > array[x][y]){
y++;
}
else {
return true;
}
}
return false;
}
}
其實(shí)答案跟我的思路是一樣的荠医,但是在條件語句上由于我的輕慢態(tài)度忽視了這個(gè)小小的if esle,那么 if if 和 if else 有什么不同呢
原來用 if if的話,每一個(gè)if 條件語句都要跑一遍桑涎,如果我走完第一個(gè)if 符合條件x減小了1彬向,我還要在第二個(gè)if 里使用x再判斷一遍,這樣就不是初始的x 值了石洗。
而用 if else 表示如果第一個(gè) if 條件成立走完第一個(gè)if的代碼塊幢泼,后面就不用看了。這就是最顯著的區(qū)別讲衫。
經(jīng)過這次不能小瞧if else 和 if if 條件語句啊缕棵。