文章

50

粉丝

0

获赞

0

访问

2.2k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年9月14日 17:25
阅读数 12

(1)设置变量max存放最大的峰,设置min存放最大的谷遍历查找峰和谷,设置flag1和flag2来判断存在峰和谷,如果flag1和flag2都为true返回max-min否则返回0
(2)

int find(vector<int>&arr){
	int n=arr.size();
	int ans=0;
	bool flag=false;
	for(int i=1;i<n-1;i++){
		if(arr[i]>arr[i-1]&&arr[i]>arr[i+1]){
			for(int j=i+1;j<n-1;j++){
				if(arr[j]<arr[j-1]&&arr[j]<arr[j+1]){
					if(flag){
						ans=arr[i]-arr[j];
						flag=true;
					}else{
						ans=max(arr[i]-arr[j],ans);
					}
				}
			}
		}
	}
	return ans;
}

(3)时间复杂度是O(n^2)递归2重循环,空间复杂度是O(1)只有几个固定的变量


评分及理由

(1)得分及理由(满分4分)

学生给出的基本设计思想是:设置变量max和min来存放峰和谷,但实际代码中并未使用max和min,而是使用了双重循环遍历所有峰和谷的组合。思路描述不清晰,且未体现高效算法的设计(如预处理最小谷值),与标准答案的高效思路不符。但基本思路是遍历峰和谷的组合,因此给1分。

(2)得分及理由(满分7分)

学生代码存在以下问题:
1. 代码逻辑错误:flag变量初始为false,但内层循环中若找到谷,第一次进入时设置ans为当前差值并将flag设为true,但后续进入else分支时,ans更新逻辑正确。但flag的命名和用法不清晰(应表示是否找到过峰谷对),但功能基本正确。
2. 效率问题:使用双重循环遍历所有峰和谷的组合,时间复杂度为O(n^2),不符合题目要求的“高效算法”(标准答案为O(n))。
3. 边界处理:未考虑数组长度小于3的情况(直接返回0),但代码中循环条件已避免越界。
4. ...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发