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

本文探讨了两道面试算法题目,一是设计高效算法计算X^YmodN,二是统计有序数组平方后不同值的数量。通过具体代码示例展示了左移运算及Set集合的应用。

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

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值