leetcode 1588. 所有奇数长度子数组的和--Java、Python以及Scala语言的实现

问题描述

  • 给你一个正整数数组arr ,请你计算所有可能的奇数长度子数组的和。子数组定义为原数组中的一个连续子序列。请你返回arr中所有奇数长度子数组的和 。
  • 输入:arr = [1,4,2,5,3]
  • 输出:58

解题思路

  • 首先循环遍历数组arr的可能长度i(i为奇数),接着在循环遍历数组arr中的每一个元素下标j,求和j到(i+j)的元素(不包含(i+j),并且(i+j)<=arr.length)。

Java 代码

    public int sumOddLengthSubarrays(int[] arr){
     
        int res = 0; // 初始化结果变量
        for(int i=1; i<= arr.length; i+=2){
      // 循环遍历数组的长度
            for(int j=0; j<arr.length;j++){
      // 循环遍历数组的元素下标
                if((i + j) <= arr.length) {
      // 如果(i+j)<=arr.length
                    for (int value : Arrays.copyOfRange(arr, j, (i + j))) {
     
                        res += value; // 求和arr[j:(i+j)]
                    }
                }
            }
        }
        return res; //返回结果变量
    }

Python 代码

def sumOddLengthSubarrays(arr):
    res = 0 # 初始化结果变量
    for i in range(1, len(arr) + 1, 2): # 循环遍历数组长度
        for j in range(len(arr)): # 循环遍历数组的每一个元素
            if(i + j) <= len(arr): # 如果(i+j)
                res += (sum(arr[j:(i+j)])) # 求和arr[j:(i+j)]
    return res # 返回结果变量

Scala 代码

  def sumOddLengthSubArrays(arr: Array[Int]): Int = {
     
    var res:Int = 0 // 初始化结果变量
    for(i <- 1 to arr.length if i%2!=0){
      // 循环遍历数组的长度
      for(j <- 0 until arr.length){
      // 循环遍历数组的元素
        if ((i+j) <= arr.length){
      // 如果(i+j)小于数组的长度
          for(k <- j until (i+j)){
      // 求和arr[j:i+j]
            res += arr(k)
          }
        }
      }
    }
    res // 返回结果变量
  }

你可能感兴趣的:(leetcode问题解决,算法)