问题描述:
在一个二维数组中,同一行从左到右值逐渐增加。同一列从上到下值逐渐增加。找数组中存在的值。
代码思想:
发现在二维数组中从对角线为分界线。对角线上方的值都比对角线小,对角线下方的值比对角线的值大。从左下角开始比较。
代码:
package cn.wzq.sword_finger_offer;
public class Sword01 {
public int[][] array = {
{1, 5, 9, 13},
{2, 6, 10, 14},
{3, 7, 11, 15},
{4, 8, 12, 16}
};
public int[] find(int target, int[][] array) {
int left = 0;
int right = array[0].length - 1;
int top = 0;
int bottom = array.length - 1;
int[] result = new int[2];
while (bottom >= top && left <= right){
if (target == array[bottom][left]) {
result[0] = bottom;
result[1] = left;
return result;
} else if (target < array[bottom][left]) {
bottom--;
} else {
left++;
}
}
return null;
}
public void dislay(int target, int[][] array){
int[] value = null;
value = find(target,array);
if (value == null){
System.out.println("Can`t find the value!");
}else {
System.out.println("第" + value[0] + "数组; 第" + value[1] + "位!");
}
}
public static void main(String arg[]){
Sword01 sword = new Sword01();
sword.dislay(10,sword.array);
}
}