栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode——553.最优除法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode——553.最优除法

大佬,牛!!!

题目:给定一个数组,他们会相除,但是我们可以加括号。要求使得最终的结果最大。例如:[1000,100,10,2],然后1000/(100/10)/2 = 50;1000/(100/(10/2)) = 50;1000/100/10/2 = 0.5;1000/100/(10/2) = 2等,我们需要的是1000/(100/10/2) = 200思路:我先说一下我的思路,就是分子大,分母小。但是不知道怎么弄,而且动态规划,也不是很会。但是本题可以不用动态规划,并且动态规划时间复杂度还高。大佬的思路:这里有个技巧就是值是2-1000之间的。然后配合我的思路,分子最大就是nums[0],因为接下来要背一个大于2的东西除,分子最小就是剩下的进行除,因为越除越小。技巧:

主要是的数是有限制的。

伪代码

遍历数组进行拼接,返回的形式是nums[0]/(nums...)

java代码

class Solution {
    public String optimalDivision(int[] nums) {
        // 这个题目,直接就是nums[0]/(nums...)即可
        int n = nums.length;

        if (n == 1) {
            return String.valueOf(nums[0]);
        } else if (n == 2) {
            return String.valueOf(nums[0]) + "/" + String.valueOf(nums[1]);
        }
        StringBuilder sb = new StringBuilder();
        sb.append(nums[0]);
        sb.append("/(");
        sb.append(nums[1]);
        for (int i = 2; i < n; i++) {
            sb.append("/");
            sb.append(nums[i]);
        }
        sb.append(")");
        return sb.toString();
    }
}

总结:看到数学的方法,恍然大明白啊,哎。附大佬链接。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号