面试题三:找出数组中重复的数字
简单实现,没有考虑时间和空间复杂度,测试用例与书上的不一样
import java.util.*;
public class FindDuplicatedElements {
private Set<Integer> ls=new LinkedHashSet<Integer>();
public void findDuplicated(int[] arr) throws Exception{
if(arr.length<0)
throw new Exception();
int rep=0,a=0;
for(int i=0;i<arr.length;i++){
a=arr[i];
for(int j=0;j<arr.length;j++)
if(a==arr[j]) rep++;
if(rep>1)
ls.add(arr[i]);
rep=0;
}
}
public static void main(String[] args){
int []arr=new int[]{1,8,2,34,4,5,6,4,6,5,4,8};
FindDuplicatedElements fde=new FindDuplicatedElements();
try{
fde.findDuplicated(arr);
}
catch(Exception e){
e.printStackTrace();
}
for(int s:fde.ls){
System.out.println(s);
}
}
}
面试题4:二维数组的查找
在一个二维数组中,每一行按照从左到右递增的顺序排序,每一列按照从上倒下的顺序排列。输入一个数判断是否含有该整数
public class FindDoubleMatrix {
public boolean Find(int[] martix,int rows,int column,int num){
boolean found=false;
if(martix.length>0&&column>0&&rows>0){
int col=column-1;
int row=0;
while(col>=0&row<rows){
if(martix[column*row+col]==num)
{
found=true;
break;
}
else if(martix[column*row+col]>num){
col--;
}
else row++;
}}
return found;
}
public static void main(String[] args){
FindDoubleMatrix fdm=new FindDoubleMatrix();
int []martix=new int[]{1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
System.out.println(fdm.Find(martix, 4, 4, 7));
System.out.println(fdm.Find(martix, 4, 4, 3));
}
}
参考书籍《剑指Offer 名企面试官精讲典型编程题》