628. Maximum Product of Three Numbers

来源:互联网 发布:asm算法原理 编辑:程序博客网 时间:2024/06/03 08:00

最后答案


class Solution {
    public int maximumProduct(int[] nums) {
        int n=nums.length-1;
        int sum=0;
        Arrays.sort(nums);
        
            
        return Math.max(nums[0]*nums[1]*nums[n],nums[n]*nums[n-1]*nums[n-2]);
    }
}


时间复杂度O(n*logn)

空间复杂度O(1)



这题刚开始自己思路想的是排序 然后从后往前 取最后三个数相乘,因为觉得已经排好序了 最大三个必是最后三个 

提交的时候 遇到了两个问题 一是数组越界 后来查找后发现 int n =nums.length写错了应该是 int n=nums.length-1。。很惭愧

                                              第二个问题显示 提交后答案不对 看了一下例子 这里上图说明 

这里其实自己有考虑到负数问题 不过没有仔细思考,后来想了一些 如果是负数 答案必须是两个负数 因为负负得正 所以取最开头两个元素和最后一个元素相乘 如果是正数 则是最后三个元素

自己的做法其实是 分别设i j k三个数分别赋值 但是这个方法要写的判断似乎很多 而且也不是用排序解此题的写法,最后在官网solution上找到了最精简的做法,用max比较上面负数负数正数和正数正数正数的方法 然后取答案。。。。果断又精简 自己却还在思考循环和赋值索引。。特么的



其实还有更好的方法 就是遍历这个数组后 取头两位 尾三位进行max比较 这个方法时间复杂度是O(n) 但是这个方法自己尚未理解 过几天将补齐这个方法

原创粉丝点击