作业2| 豆包MarsCode AI 刷题

57 阅读4分钟
def solution(n, array):
    max_area = 0
    for i in range(n):
        min_height = array[i]
        for j in range(i, n):
            min_height = min(min_height, array[j])
            width = j - i + 1
            area = min_height * width
            max_area = max(max_area, area)
    return max_area
```**函数定义**:

  


-   `solution`函数接受两个参数`n``array`,分别表示数组的长度和要处理的数组。

  


**主要逻辑**-   初始化`max_area`为 0,用于存储最终要返回的最大矩形面积。

-   第一个循环`for i in range(n)`:以数组中的每个位置作为起点。

    -   初始化`min_height`为当前起点位置的高度`array[i]`    -   第二个循环`for j in range(i, n)`:从当前起点位置开始逐步向后遍历,直到数组末尾。

        -   在这个循环中,不断更新`min_height`为当前子数组中最小的高度,即`min(min_height, array[j])`        -   计算当前子数组的宽度为`j - i + 1`,表示从起点`i`到当前位置`j`的元素个数。
        -   根据当前子数组的最小高度和宽度计算矩形面积`area = min_height * width`        -   将当前矩形面积与已记录的最大矩形面积进行比较,更新`max_area`为较大值,即`max_area = max(max_area, area)`**返回结果**-   最后,函数返回`max_area`,即整个数组中任意长度的相邻元素所能形成的最大矩形面积。

提供一些其他编程语言实现的类似算法的代码

最大矩形面积问题的其他解法

如何在实际应用中使用最大矩形面积算法?
我们可以把对模型的使用过程拆解成三块,分别是**输入提示**(对应图中的Format)、**调用模型**(对应图中的Predict)和**输出解析**(对应图中的Parse)。这三块形成了一个整体,因此在LangChain中这个过程被统称为 **Model I/O**(Input/Output)。

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/44ab38cb7f5a4033927eca863d2c2c38~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgcmF5YnVyc3Q=:q75.awebp?rk3s=f64ab15b&x-expires=1772031492&x-signature=XSupxm%2FmI1VvN2J3%2B8iMJmXh%2FRY%3D "Model I/O:从输入到输出")

在模型 I/O的每个环节,LangChain都为咱们提供了模板和工具,快捷地形成调用各种语言模型的接口。

1.  **提示模板**:使用模型的第一个环节是把提示信息输入到模型中,你可以创建LangChain模板,根据实际需求动态选择不同的输入,针对特定的任务和应用调整输入。
1.  **语言模型**:LangChain允许你通过通用接口来调用语言模型。这意味着无论你要使用的是哪种语言模型,都可以通过同一种方式进行调用,这样就提高了灵活性和便利性。
1.  **输出解析**:LangChain还提供了从模型输出中提取信息的功能。通过输出解析器,你可以精确地从模型的输出中获取需要的信息,而不需要处理冗余或不相关的数据,更重要的是还可以把大模型给回的非结构化文本,转换成程序可以处理的结构化数据。

下面我们用示例的方式来深挖一下这三个环节。先来看看LangChain中提示模板的构建。

## 提示模板

语言模型是个无穷无尽的宝藏,人类的知识和智慧,好像都封装在了这个“魔盒”里面了。但是,怎样才能解锁其中的奥秘,那可就是仁者见仁智者见智了。所以,现在“提示工程”这个词特别流行,所谓Prompt Engineering,就是专门研究对大语言模型的提示构建。

我的观点是,使用大模型的场景千差万别,因此肯定不存在那么一两个神奇的模板,能够骗过所有模型,让它总能给你最想要的回答。然而,好的提示(其实也就是好的问题或指示啦),肯定能够让你在调用语言模型的时候事半功倍。

那其中的具体原则,不外乎吴恩达老师在他的[提示工程课程](https://link.juejin.cn/?target=https%3A%2F%2Flearn.deeplearning.ai%2Flogin%3Fredirect_course%3Dchatgpt-prompt-eng "https://learn.deeplearning.ai/login?redirect_course=chatgpt-prompt-eng")中所说的:

1.  给予模型清晰明确的指示
1.  让模型慢慢地思考

说起来很简单,对吧?是的,道理总是简单,但是如何具体实践这些原则,又是个大问题。让我从创建一个简单的LangChain提示模板开始。

这里,我们希望为销售的每一种鲜花生成一段简介文案,那么每当你的员工或者顾客想了解某种鲜花时,调用该模板就会生成适合的文字。

这个提示模板的生成方式如下:

plain 复制代码 AI练中学

导入LangChain中的提示模板

from langchain.prompts import PromptTemplate

创建原始模板

template = """您是一位专业的鲜花店文案撰写员。\n 对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗? """

根据原始模板创建LangChain提示模板

prompt = PromptTemplate.from_template(template)

打印LangChain提示模板的内容

print(prompt)


提示模板的具体内容如下:

plain 复制代码 AI练中学 input_variables=['flower_name', 'price'] output_parser=None partial_variables={} template='/\n您是一位专业的鲜花店文案撰写员。 \n对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?\n' template_format='f-string' validate_template=True