【华为OD机试】叠积木(贪心算法—Java&Python&C++&JS实现)
以下是使用Java、Python、C++和JavaScript实现的栈式算法解决方案。
Java实现:
import java.util.Arrays;
public class StackBlocks {
public static int[] stackBlocks(int[] blocks) {
Arrays.sort(blocks); // 对块进行排序
int stacks = 1; // 初始化栈数为1
int top = blocks[0]; // 栈顶块的高度初始化为数组中的第一个元素
for (int i = 1; i < blocks.length; i++) {
if (blocks[i] > top) { // 如果当前块比栈顶块高
top = blocks[i]; // 更新栈顶块的高度
stacks++; // 栈数增加
}
}
return new int[]{stacks, top}; // 返回栈数和最高的块高
}
public static void main(String[] args) {
int[] blocks = {5, 2, 3, 4, 1};
int[] result = stackBlocks(blocks);
System.out.println("栈的数量: " + result[0]);
System.out.println("最高的块高: " + result[1]);
}
}
Python实现:
def stack_blocks(blocks):
blocks.sort() # 对块进行排序
stacks = 1 # 初始化栈数为1
top = blocks[0] # 栈顶块的高度初始化为数组中的第一个元素
for block in blocks[1:]:
if block > top: # 如果当前块比栈顶块高
top = block # 更新栈顶块的高度
stacks += 1 # 栈数增加
return stacks, top # 返回栈数和最高的块高
blocks = [5, 2, 3, 4, 1]
stacks, top = stack_blocks(blocks)
print("栈的数量:", stacks)
print("最高的块高:", top)
C++实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> stackBlocks(vector<int>& blocks) {
sort(blocks.begin(), blocks.end()); // 对块进行排序
int stacks = 1; // 初始化栈数为1
int top = blocks[0]; // 栈顶块的高度初始化为数组中的第一个元素
for (int i = 1; i < blocks.size(); i++) {
if (blocks[i] > top) { // 如果当前块比栈顶块高
top = blocks[i]; // 更新栈顶块的高度
stacks++; // 栈数增加
}
}
return {stacks, top}; // 返回栈数和最高的块高
}
int main() {
vector<int> blocks = {5, 2, 3, 4, 1};
vector<int> result = stackBlocks(blocks);
cout << "栈的数量: " << result[0] << endl;
cout << "最高的块高: " << result[1] << endl;
return 0;
}
JavaScript实现:
function stackBlocks(blocks) {
blocks.sort((a, b) => a - b); // 对块进行排序
let stacks = 1; // 初始化栈数为1
let top = blocks[0]; // 栈顶块的高度初始化为数组中的第一个元素
for (let i = 1; i < blocks.length; i++) {
if (blocks[i] > top) { // 如果当前块比栈顶块高
top = blocks[i]; // 更新栈顶块的高度
评论已关闭