有关高效算法和数组的两道面试题

最近也在找工作,于是在网上看到几到有意思的面试题,突发奇想的做了一下,应该小效率上不够完美,如果你有更好的想法,希望交流,我会热心欢迎,谢谢!

1、设计一个高效的算法:X^Y mod N?

左移运算x<

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

你可能感兴趣的:(java)