1.数组中重复的数字
长度为n的数组里所有的数字都在0-n-1范围内,数组中有重复的数字,请找出任意重复的数字
方法:
1.排序后进行查找
2.哈希表
3.重排数组,当扫描到下标为i时,使得a[i]=i,如果不是进行交换,重复比较
代码如下
package jichu;
public class Offer1 {
public static void main(String args[]){
int[] a={2,3,1,0,2,5,3};
int t;
for(int i=0;i<7;i++){
while(a[i]!=i){
if(a[i]==a[a[i]]){
System.out.println("重复数字:"+a[i]);
break;
}
t=a[i];
a[i]=a[t];
a[t]=t;
}
}
}
}
2 3 1 0 2 5 3
1 3 2 0 2 5 3
3 1 2 0 2 5 3
0 1 2 3 2 5 3
以此类推
2.二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
从右上角开始判断 因为如果在中间开始找的话,会有好几种情况上左或者下右
package jichu;
public class Offer1 {
public static void main(String args[]){
int[][] a={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int x=7;
int r=0,row=3;
int c=3;
while(r<row&&c>=0){
if(a[r][c]==x){
System.out.println("success!"+r+" "+c);
}
if(a[r][c]>x){
c=c-1;
}
else{
r=r+1;
}
}
}
}