贪心算法求解拆楼房问题

这是一道典型的贪心算法问题,首先遍历找到一个高度大于0的楼房,然后以此为基准,划分一个区间,找到楼房内高度最小的楼房,每次都减去这个高度最小的值。

后续重复一样,再找减去后楼房高度的最小值,每次减去这个值,直到所有楼房为0.

代码如下:

java 复制代码
// 盖楼房
import java.util.Scanner;

public class Solution22 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter the number of buildings (n): ");
        int n = scanner.nextInt();

        int[] heights = new int[n];
        System.out.println("Enter the heights of the buildings:");
        for (int i = 0; i < n; i++) {
            heights[i] = scanner.nextInt();
        }

        int operations = minimizeOperations(heights);
        System.out.println("Minimum operations needed: " + operations);
    }

    public static int minimizeOperations(int[] heights) {
        int operations = 0;
        int n = heights.length;

        while (true) {
            int start = -1;
            for (int i = 0; i < n; i++) {
                if (heights[i] > 0) {
                    start = i;
                    break;
                }
            }

            if (start == -1) {
                break; // All buildings are zero height
            }

            int minHeight = heights[start];
            int end = start;
            for (int i = start; i < n && heights[i] > 0; i++) {
                minHeight = Math.min(minHeight, heights[i]);
                end = i;
            }

            for (int i = start; i <= end; i++) {
                heights[i] -= minHeight;
            }

            operations++;
            System.out.println("Operation " + operations + ": Reduce buildings from " + start + " to " + end + " by " + minHeight);
        }

        return operations;
    }
}
相关推荐
MQLYES10 分钟前
03-BTC-数据结构
数据结构·算法·哈希算法
无限进步_20 分钟前
【数据结构&C语言】对称二叉树的递归之美:镜像世界的探索
c语言·开发语言·数据结构·c++·算法·github·visual studio
im_AMBER33 分钟前
Leetcode 98 从链表中移除在数组中存在的节点
c++·笔记·学习·算法·leetcode·链表
高山上有一只小老虎1 小时前
灵异背包?
java·算法
s09071361 小时前
【综述】前视二维多波束成像声呐(FLS)图像处理算法全解析:从成像到深度学习
图像处理·人工智能·算法·声呐·前视多波束
星河耀银海1 小时前
人工智能从入门到精通:机器学习基础算法实战与应用
人工智能·算法·机器学习
nice_lcj5202 小时前
数据结构之堆:从概念到应用全解析(附TOP-K经典问题)
java·数据结构·算法
无言(* ̄(エ) ̄)2 小时前
进程---Linux/C语言
java·开发语言·算法
漫随流水2 小时前
leetcode算法(429.N叉树的层序遍历)
数据结构·算法·leetcode·二叉树
漫随流水2 小时前
leetcode算法(116.填充每个节点的下一个右侧节点指针)
数据结构·算法·leetcode·二叉树