数组:找四个连续下标的最大值

本文介绍了一种通过遍历数组并计算每四个连续元素之和来找出最大和的方法。利用这种方法可以找到使得连续四个元素之和最大的起始位置及该最大和值。此算法适用于固定长度的窗口滑动问题。

  

输入:

20
11 19 9 12 5 20 1 18 4 16 6 10 15 2 17 3 14 7 13 8

输出:

51
1

代码实现:

#include <bits/stdc++.h>
using namespace std;

int main(){
	int i,n,x=INT_MIN,t=0,r;
	int a[21];
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a[i];
	}

	for(i=0;i<n;i++){
		//连续四个下标的和
		t=a[i]+a[(i+1)%n]+a[(i+2)%n]+a[(i+3)%n];
		if(t>x){//打擂台比大小
			x=t;
			 r=i+1;
		}
	}
	cout<<x<<endl<<r;	
}

 

 

 

 

### 如何在数组最大值及其索引位置 为了在一个数组最大值及其对应的索引位置,可以采用多种编程语言中的不同方法来实现。以下是几种常见的解决方案: #### 方法一:遍历数组 通过逐一比较数组中的每个元素,记录当前遇到的最大值及其索引。 ```csharp public static Tuple<int, int> FindMaxAndIndex<T>(T[] arr) where T : IComparable<T> { if (arr == null || arr.Length == 0) throw new ArgumentException("Array is empty or null."); var maxValue = arr[0]; var maxIndex = 0; for (var i = 1; i < arr.Length; ++i) { if (arr[i].CompareTo(maxValue) > 0) { maxValue = arr[i]; maxIndex = i; } } return Tuple.Create(Convert.ToInt32(maxValue), maxIndex); } ``` 上述代码实现了寻数组最大值及其索引的功能[^1]。该方法的时间复杂度为 O(n),其中 n 是数组长度。 --- #### 方法二:使用 JavaScript 的内置函数 JavaScript 提供了一些便捷的方法用于处理数组操作,例如 `reduce` `indexOf` 函数。 ```javascript function findMaxAndIndex(arr) { if (!Array.isArray(arr) || arr.length === 0) { throw new Error('Invalid input array.'); } const max = arr.reduce((prev, curr) => (curr > prev ? curr : prev)); const index = arr.indexOf(max); return { max, index }; } // 示例调用 const result = findMaxAndIndex([9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1]); console.log(result); // 输出: { max: 109, index: 6 } ``` 此方法利用了 `reduce()` 来计算最大值,并通过 `indexOf()` 获取对应索引[^4]。 --- #### 方法三:基于 Python 实现 Python 中可以通过简单的列表推导式或者内置函数快速完成这一需。 ```python def find_max_and_index(lst): if not lst: raise ValueError("List cannot be empty.") max_value = max(lst) max_index = lst.index(max_value) return max_value, max_index # 示例调用 result = find_max_and_index([9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1]) print(result) # 输出: (109, 6) ``` 这里借助了 Python 的 `max()` `index()` 函数[^5]。 --- #### 方法四:C++ 使用 STL 库 对于 C++ 用户来说,标准模板库提供了方便的工具来进行此类操作。 ```cpp #include <vector> #include <algorithm> std::pair<int, size_t> findMaxAndIndex(const std::vector<int>& nums) { if (nums.empty()) { throw std::invalid_argument("Vector must contain at least one element."); } auto it = std::max_element(nums.begin(), nums.end()); return { *it, std::distance(nums.begin(), it) }; } // 示例调用 int main() { std::vector<int> vec = {9, 8, 55, 66, 49, 68, 109, 55, 33, 6, 2, 1}; auto [max_val, idx] = findMaxAndIndex(vec); printf("Max Value: %d, Index: %zu\n", max_val, idx); // 输出: Max Value: 109, Index: 6 return 0; } ``` 这段代码展示了如何使用 `<algorithm>` 头文件中的 `std::max_element` 最大值及其迭代器位置[^3]。 --- ### 结论 无论选择哪种语言或方式,核心思路都是通过对整个数据集的一次扫描出目标值及其所在位置。具体实现可以根据实际应用场景个人偏好调整优化策略。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

no_obstacles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值