You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组左旋转后查找最大值元素的索引位置

解决方案:无需实际旋转数组,直接计算最大值索引

我来帮你搞定这个需求——其实完全不用真的去旋转数组(尤其是数组很大的时候,旋转操作既费内存又没必要),咱们用数学计算就能直接得出结果,效率拉满。

核心思路是抓住「左旋转的本质是元素位置的循环移动」,步骤拆解如下:

  • 步骤1:先找到原数组中最大值的初始索引(如果有多个相同最大值,这里默认取第一个出现的;需要取最后一个的话,后面会说调整方法)
  • 步骤2:计算有效旋转次数:因为旋转数组长度n次后,数组会回到初始状态,所以用 k % n 去掉多余的循环旋转
  • 步骤3:用公式计算新索引:(初始索引 - 有效旋转次数) % 数组长度,这个公式会自动处理负数情况,返回正确的正索引

代码示例(Python)

def find_max_index_after_left_rotation(arr, k):
    n = len(arr)
    if n == 0:
        return -1  # 处理空数组的边界情况
    
    # 找到最大值的第一个出现索引
    max_value = max(arr)
    original_max_idx = arr.index(max_value)
    
    # 计算实际需要旋转的次数(去掉循环的部分)
    effective_rotations = k % n
    
    # 计算旋转后的新索引
    new_max_idx = (original_max_idx - effective_rotations) % n
    return new_max_idx

# 测试你的示例
test_array = [5, 7, 1, 8, 2]
print(find_max_index_after_left_rotation(test_array, 2))  # 输出1,符合预期
print(find_max_index_after_left_rotation(test_array, 6))  # 输出2,符合预期

公式原理验证

拿你给的第二个示例拆解:

  • 数组长度n=5,旋转6次的有效次数是6%5=1
  • 最大值8的初始索引是3
  • 计算:(3 - 1) % 5 = 2,和示例结果完全一致

再试个极端情况:旋转5次(等于没旋转),有效次数0,新索引就是3,和原位置一致,正确;旋转8次(有效次数3),(3-3)%5=0,对应左旋转3次后的数组[8,2,5,7,1],8确实在索引0,没问题。

处理多个最大值的情况

如果数组里有多个相同的最大值(比如[8,5,8,2]),想要取最后一个最大值的初始索引,只需要把找索引的代码改成:

original_max_idx = len(arr) - 1 - arr[::-1].index(max_value)

再代入公式计算就能得到最后一个最大值旋转后的位置。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:55:05