首页 > 学院 > 开发设计 > 正文

Interview: 某互联网公司

2019-11-06 07:24:14
字体:
来源:转载
供稿:网友
第一题我用的方法是使用一个字符数组作dictionary,数组长度33,构建7个空格和26个字母组成。然后使用Random rand; rand.nextInt(33) 生成Uniform distribution的[0, 33)的随机整数。从数组当中随机提取100次字符。这道题耗时的点在于:1)String和char的相互转化不熟,具体体现在以下的几个常见的方面:One: 从char array到String,不能直接array.toString()。因为数组其实是一个特殊的自定义类型。默认的toString其实只是返回hashCode()。如果使用Arrays.toString()的话,和直接打印Containers是一个效果。[] 方括号括住,元素之间用逗号相隔。所以,应该使用String.valueOf(char[] array)这个方法。Two: String到char array,使用str.toCharArray()这个方法。Three: 关于char能否直接append在string后面(其实,凡是构造string,最好使用string builder,因为string是immutable,所以每次使用 + 都是重新new一个string)。是可以的。从没有效率的方法(直接使用String)来说,其具有的带参构造器有:String (char[] val); String (String str); String(StringBuffer, buffer); String(StringBuilder builder); 当然,还有一个非常实用的:String(char[] val, int offset, int count); 设置偏移量和长度之后可以直接截取char array的一部分作为字符串。使用+号之后,相当于直接使用new String(char[] array)这个构造器和concat这个函数。题外话:关于String 和 String Builder类的常用方法和注意,请参考这篇文章:http://blog.csdn.net/firehotest/article/details/603056482)一开始也没向清楚java产生随机数的类。Java生成随机数有两个方法:1)Math.random() 生成一个 [0,1) 之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机数。这个方法的局限在只能生成小数的随机数。有一些tricky的方法:如何利用Math.random来生成整数(直接截尾):Math.random() 可以产生一个 大于等于 0 且 小于 1 的双精度伪随机数,假设需要产生 ”0《= 随机数 <=10” 的随机数,可以这样做:int num =(int)(Math.random() * 11);那如何产生 “5 <= 随机数 <= 10” 的随机数呢?int num = 5 + (int)(Math.random() * 6);生成 “min <= 随机数 <= max ” 的随机数int num = min + (int)(Math.random() * (max-min+1));2)利用java.util.Random类,此类有nextInt, nextDouble等方法。其参数可以是nextInt(10)// 生成一个[0,10)的整数。注意同样是前闭后开。Random rand = new Random();// nextInt is normally exclusive of the top value,// so add 1 to make it inclusiveint randomNum = rand.nextInt((max - min) + 1) + min;Random类同样可以像C语言一样,利用setSeed(long seed)来设置随机种子。通常seed可以通过System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long. 通过这个方法来确保每次运行生成的随机数是不同的。第二道题我用的是hashSet判断是否重复,但是其实更简答的方法是用String的indexOf(char target)和lastIndexOf(char target)来实现判断是否有重复。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表