剑指offer(数组中重复的数字,二维数组中的查找)

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;
             }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值