职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 253|回复: 9

一个公司的Java面试题

[复制链接]
紫衿 发表于 2011-8-28 08:55 | 显示全部楼层 |阅读模式
给定一个int数组,写一个函数判断该数组中的所有数字是否能组成连续数字。如[1,3,4,6,2,5]能组成连续数字,【1,2,5,4,7】不能。数组中的数也可能重复

呵呵,我采用笨办法:先用一个循环找出数字中的最大值和最小值,然后从最小到最大值在数组中循环查找对应数字,只要有一个数没有找到,就返回false,如果都找到了,就返回true.
Java代码  
public boolean  isContinousArray(int[] intArr)   
    {   
        if(intArr==null) return false;   
        if(intArr.length<2) return true;   
        int maxInt=intArr[0],minInt=intArr[0];   
        for(int i:intArr)   
        {   
            System.out.println(i);   
            if(i>maxInt) maxInt=i;   
            if(i<minInt) minInt=i;   
        }   
        for(int value=minInt;value<=maxInt;value++)   
        {   
            boolean found=false;   
            for(int j:intArr)   
            {   
                if(j==value)   
                {   
                    found=true;   
                    break;   
                }   
            }   
            if(!found) return false;   
        }   
        return true;   
    }  

public boolean  isContinousArray(int[] intArr)
        {
                if(intArr==null) return false;
                if(intArr.length<2) return true;
                int maxInt=intArr[0],minInt=intArr[0];
                for(int i:intArr)
                {
                        System.out.println(i);
                        if(i>maxInt) maxInt=i;
                        if(i<minInt) minInt=i;
                }
                for(int value=minInt;value<=maxInt;value++)
                {
                        boolean found=false;
                        for(int j:intArr)
                        {
                                if(j==value)
                                {
                                        found=true;
                                        break;
                                }
                        }
                        if(!found) return false;
                }
                return true;
        }

是不是还有更好的算法?

只学java 发表于 2011-8-28 08:55 | 显示全部楼层
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1

爱车车 发表于 2011-8-28 08:55 | 显示全部楼层
先一次循环数组array,拿到最大值m和最小值n。
然后看array的长度是不是m-n+1,不是就return false。
然后创建一个新数组bucket[m-n+1],
对于数组array中的每一个数x,令bucket[x-n]=1,
定义y =1
最后循环一遍bucket,y = y&bucket[i];如果y=0,return false
否则,return true。

能文能武 发表于 2011-8-28 08:55 | 显示全部楼层
也可以只取一个最小值。然后如此操作。

fl 发表于 2011-8-28 08:56 | 显示全部楼层
kimmking 写道
先一次循环数组array,拿到最大值m和最小值n。
然后看array的长度是不是m-n+1,不是就return false。
然后创建一个新数组bucket[m-n+1],
对于数组array中的每一个数x,令bucket[x-n]=1,
定义y =1
最后循环一遍bucket,y = y&bucket[i];如果y=0,return false
否则,return true。

我从这开始再将数组放入set,看set的size和数组的length
再把数组的和算出来。。。。。

愚人 发表于 2011-8-28 08:56 | 显示全部楼层
创建一个数组String str = new String("0123456789");
将数字转换为字符串型,判断该字符串是否是str的子串,是则是连续数字,否则不是。

爱车车 发表于 2011-8-28 08:56 | 显示全部楼层
max-min+1 == length

叫我小乖 发表于 2011-8-28 08:56 | 显示全部楼层
第一排序
第二相加,相乘得出结果
也许效率高哦

话说我当年 发表于 2011-8-28 08:56 | 显示全部楼层
xgrass18 写道
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1

数字是允许重复的

木已 发表于 2011-8-28 08:56 | 显示全部楼层
Checkmate 写道
kimmking 写道
先一次循环数组array,拿到最大值m和最小值n。
然后看array的长度是不是m-n+1,不是就return false。
然后创建一个新数组bucket[m-n+1],
对于数组array中的每一个数x,令bucket[x-n]=1,
定义y =1
最后循环一遍bucket,y = y&bucket[i];如果y=0,return false
否则,return true。

我从这开始再将数组放入set,看set的size和数组的length
再把数组的和算出来。。。。。

一定要注意:数字允许重复
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 19:32 , Processed in 0.143477 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表