力扣---2020.3.30

面试题62. 圆圈中最后剩下的数字

class Solution {
    public int lastRemaining(int n, int m) {
        ArrayList<Integer> list = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            list.add(i);
        }
        int idx = 0;
        while (n > 1) {
            idx = (idx + m - 1) % n;
            list.remove(idx);
            n--;
        }
        return list.get(0);
    }
}
class Solution {
    public int lastRemaining(int n, int m) {
        int ans = 0;
        // 最后一轮剩下2个人,所以从2开始反推
        for (int i = 2; i <= n; i++) {
            ans = (ans + m) % i;
        }
        return ans;
    }
}
class Solution {
    public int lastRemaining(int n, int m) {
        return n == 1 ? 0 : (lastRemaining(n - 1, m) + m) % n;
    }
}
class Solution {
    public int lastRemaining(int n, int m) {
        if(n == 2) {
            if(m % 2 == 0) {
                return 0;
            } else {
                return 1;
            }
        }
        return (lastRemaining(n-1, m) + m) % n;
    }
}

面试题66. 构建乘积数组

//超时啦,hahhah
class Solution {
    public int[] constructArr(int[] a) {
        int[] arr = new int[a.length];
        for(int i=0;i<a.length;i++){
            int res = 1;
            for(int j=0;j<a.length;j++){
                if(i==j){
                    res *=1;
                }else{
                    res *= a[j];
                }
            }
            arr[i] = res;
        }
        return arr;
    }
}
class Solution {
    public int[] constructArr(int[] a) {
int n = a.length;
    int[] B = new int[n];
    for (int i = 0, product = 1; i < n; product *= a[i], i++)       /* 从左往右累乘 */
        B[i] = product;
    for (int i = n - 1, product = 1; i >= 0; product *= a[i], i--)  /* 从右往左累乘 */
        B[i] *= product;
    return B;
    }
}
class Solution {
    public int[] constructArr(int[] a) {
        int n = a.length;
        int[] B = new int[n];
        for(int i = 0,product = 1;i < n;i++){
            B[i] = product;
            product *= a[i];
        }

        for(int i = n-1,product = 1;i >= 0;i--){
            B[i] *= product;
            product *= a[i];
        }
        return B;
    }
}

面试题45. 把数组排成最小的数

  • Java8的新特性 lambda表达式(闭包): Collections.sort(listStr,(s1,s2)->(s1+s2).compareTo(s2+s1));
class Solution {
    public String minNumber(int[] nums) {
        List<String> list = new ArrayList<>();
        for (int num : nums) {
            list.add(String.valueOf(num));
        }
        list.sort((o1, o2) -> (o1 + o2).compareTo(o2 + o1));
        return String.join("", list);
    }
}

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

发布了222 篇原创文章 · 获赞 276 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40722827/article/details/105208594