最近也在找工作,于是在网上看到几到有意思的面试题,突发奇想的做了一下,应该小效率上不够完美,如果你有更好的想法,希望交流,我会热心欢迎,谢谢!
1、设计一个高效的算法:X^Y mod N?
左移运算x<<y,就是x乘以它本身的y次方,这里mod的高效算法我就不知道了,如果有知道比这更加高效的,还望告知,谢谢!
public class Demo {
public static void main(String[] args) {
System.out.println(arithmetic(2,4,3));
}
public static int arithmetic(int X,int Y,int N){
return X<<(Y-1)%N;
}
}
2、有一个有序数组,数组中的数可以是整数、负数和0,请实现一个函数,这个函数返回一个整数,返回这个数组所有数的平方值中有多少种不同的取值?
个人理解,就是一个数组中每个数的平方,有几种不同的取值,相同的则不算(如:1,0和-1的平方只有0和1两种,则返回值为2,即0和1),所以可以使用set(无序不重复)集合来存储数组中平方后的值,则集合的长度为最终返回的种类个数!
import java.util.HashSet;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
int[] arr = {-1,0,1,4};
System.out.println(getArrSquareDifferentCount(arr));
}
public static int getArrSquareDifferentCount(int[] arr){
int len = arr.length;
int result;
Set<Integer> set = new HashSet<Integer>();
for(int i=0;i<len;i++){
result = arr[i] * arr[i];
set.add(result);
}
return set.size();
}
}
本文探讨了两道面试算法题目,一是设计高效算法计算X^YmodN,二是统计有序数组平方后不同值的数量。通过具体代码示例展示了左移运算及Set集合的应用。

2144

被折叠的 条评论
为什么被折叠?



