今天在做剑指offer 二维数组中查找问题
想用二分查找。废话不多说。
int target = in.nextInt(); int left = 0; int right = aa.length - 1; int mid = (left + right) / 2;
while (aa[mid] != target && left < right) { if (aa[mid] < target) left = mid + 1; else if (aa[mid] > target) right = mid - 1; else { return true; } // mid = left + (left + right) / 2; mid = (left + right) / 2; } if (aa[mid] == target) { return true; } else { return false; } 这个版本里面,while里面没有 = 。例如在 数组 1,3,5,7,8,9里面找3.那么在while循环退出时,left, right 都指向值3, left,right,mid都为索引 1。 即需要在while外面判断left==right 的情况。 第二种版本 代码量比较少 重要的地方就是while里面的判断条件需要改为left<=right 如下int target = in.nextInt(); int left = 0; int right = aa.length - 1; int flag = 0; while ( left <= right) { int mid = (left + right) / 2; if (aa[mid] < target) left = mid + 1; else if (aa[mid] > target) { right = mid - 1; } else{ return true; } }