剑指offer 03.04
方法1.直接使用暴力查找的方法,
public static int findRepeatNumber(int[] nums){ int[] arrs = new int[nums.length]; for (int i = 0; i < nums.length; i++) { arrs[nums[i]] ++; if(arrs[nums[i]]>1) return nums[i]; } return -1; }
方法1.直接使用暴力查找的方法
1 public static boolean findNumberIn2DArray(int[][] matrix, int target) { 2 int n = matrix.length,m; 3 if(n!=0) m = matrix[0].length; 4 else return false; 5 for(int i =0;i<n;i++){ 6 for(int j =0;j<m;j++) 7 if(matrix[i][j]==target) return true; 8 } 9 return false; 10 }
方法2.将这个二维数组看成是一个二叉排序树,从右上角看作是二叉排序树的根
public static boolean findNumberIn2DArrayPlus(int[][] matrix,int target){ int n = matrix.length,m,rN,rM; if(n!=0) m = matrix[0].length; else return false; rN = 0; rM = m-1; if(rN>=n||rM<0) return false; int root = matrix[rN][rM]; while(true){ if(rN>=n||rM<0) return false; if(root<target) rN++; else if(root>target) rM--; else return true; root = matrix[rN][rM]; } }