题目中有些特殊的地方,一定是用来结题的地方。查找类的问题多往有序性上靠,在一个有序的集合内查找要和二分查找类比,大于往左,小于向右。这一题我开始只想到了从一开始往右或者往下,思维定式,看一个数组总是想着按顺序从左往右or从上向下。
写的时候也出现了一点意外,我居然在每次循环的时候重置了循环终止的条件,这不就是死循环了吗……所以提交的时候提醒我检查是否循环出现了错误,看来出错的不只我一个。
ublic class Solution { public boolean Find(int target, int [][] array) { int len = array[0].length; int hi = array.length; int i = 0; int j = hi-1; while (i<=len-1 && j>=0){
i = 0;
j = h1-i;
if(target>array[i][j]){ //如果target比该位置上的数大,就往下走 i += 1; }else if (target<array[i][j]){ j -= 1; }else if(target == array[i][j]) { return true; } } return false; } }
正确答案很是简介,大了往下走,小了往左走。很想电视里猜一个物品价格的方式。一开始我在数组的下标也犯错了,长度不是下标!!!!长度不是下标!!!!!
不过这种模式也很常见,如果在一个循环里能够解决某个问题就返回true,如果在循环里没有解决,在循环外面返回的内容就是false。
ublic class Solution { public boolean Find(int target, int [][] array) { int len = array[0].length; int hi = array.length; int i = 0; int j = hi-1; while (i<=len-1 && j>=0){ if(target>array[i][j]){ //如果target比该位置上的数大,就往下走 i += 1; }else if (target<array[i][j]){ j -= 1; }else if(target == array[i][j]) { return true; } } return false; } }