413. Arithmetic Slices

LeetCode medium original: C# #array #csharp #leetcode #medium #two-pointers
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

số nguyên mảng называется арифметическим, если он состоит не менее чем из трех elementов и если разность между любыми двумя последовательными elementами одинакова. НаVí dụ, [1,3,5,7,9], [7,7,7] и [3,-1,-5,-9] являются арифметическими последовательностями. Если задан số nguyên mảng nums, return количество арифметических подmảngов mảngа nums. Подmảng - это непрерывная subsequence mảngа.

Ví dụ:

Input: nums = [1,2,3,4]

Output: 3

C# lời giải

đã khớp/gốc
public class Solution {
    public int NumberOfArithmeticSlices(int[] nums) {
        if (nums.Length < 3) return 0;
        int count = 0;
        int currentLength = 0;
        for (int i = 2; i < nums.Length; i++) {
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {
                currentLength++;
                count += currentLength;
            } else {
                currentLength = 0;
            }
        }
        return count;
    }
}

C++ lời giải

bản nháp tự động, xem lại trước khi gửi
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int NumberOfArithmeticSlices(vector<int>& nums) {
        if (nums.size() < 3) return 0;
        int count = 0;
        int currentLength = 0;
        for (int i = 2; i < nums.size(); i++) {
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {
                currentLength++;
                count += currentLength;
            } else {
                currentLength = 0;
            }
        }
        return count;
    }
}

Java lời giải

đã khớp/gốc
public class Solution {
    public int numberOfArithmeticSlices(int[] nums) {
        if (nums.length < 3) return 0;
        int count = 0;
        int currentLength = 0;
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {
                currentLength++;
                count += currentLength;
            } else {
                currentLength = 0;
            }
        }
        return count;
    }
}

JavaScript lời giải

đã khớp/gốc
function numberOfArithmeticSlices(nums) {
    let count = 0;
    let currentLength = 0;
    for (let i = 2; i < nums.length; i++) {
        if (nums[i] - nums[i - 1] === nums[i - 1] - nums[i - 2]) {
            currentLength++;
            count += currentLength;
        } else {
            currentLength = 0;
        }
    }
    return count;
}

Python lời giải

đã khớp/gốc
def numberOfArithmeticSlices(nums):
    count = 0
    current_length = 0
    for i in range(2, len(nums)):
        if nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]:
            current_length += 1
            count += current_length
        else:
            current_length = 0
    return count

Go lời giải

đã khớp/gốc
package main

func numberOfArithmeticSlices(nums []int) int {
    count := 0
    currentLength := 0
    for i := 2; i < len(nums); i++ {
        if nums[i]-nums[i-1] == nums[i-1]-nums[i-2] {
            currentLength++
            count += currentLength
        } else {
            currentLength = 0
        }
    }
    return count
}

Algorithm

Пройдите по mảngу, инициализируя два указателя: начальный и текущий. Начните с первой пары elementов.

Для каждой пары elementов проверяйте, сохраняется ли разность между последовательными elementами. Если да, увеличивайте длину текущей арифметической последовательности. Если нет, сбрасывайте начальную позицию и начинайте новую последовательность.

Суммируйте количество найденных арифметических подmảngов, given, что для каждого арифметического подmảngа длины len, количество таких подmảngов равно (len - 2).

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.