贪心算法(9)(java)最优除法

题目:

给定一正整数数组 nums,nums中的相邻整数将进行浮点除法。例如,[2,3.4]->2/3/4.

例如,nums =[2,3,4],我们将求表达式的值"2/3/4"。

但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,以便计算后的表达式的值为最大值。以字符串格式返回具有最大值的对应表达式。

注意:你的表达式不应该包含多余的括号。

输入:【1000,100,10,2】

输出:"1000/(100/10/2)"

解法一:(复杂,不推荐)

暴力解法->递归->记忆化搜索->动态规划

解法二:

贪心策略:除了前两个数以外,其余数全放在分子上即可。

java 复制代码
public class Solution {
    public String optimalDivision(int[]nums)
    {
        int n=nums.length;//获取数组长度
        StringBuffer ret=new StringBuffer();//拼接结果字符串
        if(n==1)//如果只有·一个元素,直接返回该元素
        {
            return ret.append(nums[0]).toString();

        }
        if(n==2)//如果有2个元素,返回a/b
        {
            return ret.append(nums[0]).append("/").append(nums[1]).toString();

        }
        //当元素个数大于2时,构造a/(b/c/d...)形式最大化结果
        ret.append(nums[0]).append("/(").append(nums[1]);
        for(int i=2;i<n;i++)//从第三个元素开始循环添加
        {
         ret.append("/").append(nums[i]);
        }
        ret.append(")");
        return ret.toString();


    }

    public static void main(String[] args) {
        Solution solution=new Solution();
        int[]nums={1000,100,10,2};
        System.out.println(solution.optimalDivision(nums));

    }
}
相关推荐
李贺梖梖7 小时前
DAY25 综合案例
java
自信的小螺丝钉7 小时前
Leetcode 347. 前 K 个高频元素 堆 / 优先队列
算法·leetcode·优先队列·
-雷阵雨-7 小时前
数据结构——优先级队列(堆)
java·开发语言·数据结构·intellij-idea
好家伙VCC7 小时前
**全息显示技术的发散创新与深度探索**一、引言随着科技的飞速发展,全息显示技术已成为显示领域的一大研究热点。本文将带你
java·图像处理·python·科技·计算机视觉
步行cgn7 小时前
Java项目包结构设计与功能划分详解
java·开发语言·架构·mvc
ss2738 小时前
手写MyBatis第92弹:SqlSource体系、SqlNode树与Trim标签实现原理全揭秘
java·开发语言
235168 小时前
【LeetCode】46. 全排列
java·数据结构·后端·算法·leetcode·职场和发展·深度优先
_extraordinary_8 小时前
Java Linux --- 基本命令,部署Java web程序到线上访问
java·linux·前端
未知陨落8 小时前
LeetCode:90.最长有效括号
算法·leetcode
zzywxc7879 小时前
AI工具应用全解析:智能编码、数据标注与模型训练的协同实践
人工智能·算法·信息可视化·自动化·ai编程