面试题--1

1.给定一个非负整数的数组(如果元素个数小于2,则返回0),其中第个元素代表了第天的股
票价格,你可以无限次地完成交易,这里的一笔交易指买入持有并卖出股票的整个过程,但
是你每笔交易都需要付手续费2元。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了,请返回获得利润的最大值。

public static int number(int[] x){
        int a=x.length;
        int num=0;
        if (a<2){
            return num;
        }
        for (int i=0;i<a;i++){
            if (num<x[i]){
                num=x[i];
            }
        }
        return num-2;
    }

2.对一个整数,考虑其绝对值的所有约数(约数包含自身和1),如果其绝对值所有的约数个数大于3,则将其绝对值所有约数从大到小排序,取其前3个作为数组返回;如果其绝对值的所有的约数个数小于等于3,则将约数按照从小到大的顺序排列,作为数组返回。

public static int[] list(int x){
        //绝对值
        x=Math.abs(x);
        int num=0;
        int[] y=new int[x-1];
        int size=0;
        for (int i=1;i<=x;i++){
            if (x%i==0){
                y[size]=x/i;
                size++;
            }
        }
        if (size>3){
            int[] z=new int[3];
            for (int i=0;i<3;i++){
                z[i]=y[i];
            }
            return z;
        }
        int[] z=new int[size];
        for (int i=0;i<size;i++){
            z[i]=y[i];
        }
        //从小到大排序
        Arrays.sort(z);
        return z;
    }
}

3.对一个整数数组,返回两个元素的索引(如果有多对满足要求,只取让较小的索引取到最小值的那一对),使这两个元素相加为38;如果不存在合适的索引,则返回该数组的前两个元素;如果该数组的元素少于两个,则返回其本身。

 public static int[] output(int[] x) {
        if (x == null || x.length < 2) {
            return x;
        }
        int[] z = new int[2];
        Map<Integer, Integer> numToIndexMap = new HashMap<>();
        int count=0;
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < x.length; i++) {
            numToIndexMap.put(x[i], i);
        }
        for (int i = 0; i < x.length; i++) {
            int complement = 38 - x[i];
            if (numToIndexMap.containsKey(complement) && numToIndexMap.get(complement) != i) {
                int num1 = Math.min(i, numToIndexMap.get(complement));
                int num2 = Math.max(i, numToIndexMap.get(complement));
                map.put("min"+count, num1);
                map.put("max"+count, num2);
                count++;
            }
        }
        if (count==1){
            z[0] = map.get("min"+0);
            z[1] = map.get("max"+0);
            return z;
        }
        if (count==0) {
            z[0] = x[0];
            z[1] = x[1];
            return z;
        }
        for (int i = 0; i < count-1; i++) {
            int num=map.get("min"+i);
            int num2=map.get("min"+(i+1));
            if (num< num2) {
                z[0] = map.get("min"+i);
                z[1] = map.get("max"+i);
            }else {
                z[0] = map.get("min"+(i+1));
                z[1] = map.get("max"+(i+1));
            }
        }
        return z;
    }

你可能感兴趣的:(笔记,java,算法,数据结构)