413. Arithmetic Slices
整数 配列 называется арифметическим, если он состоит не менее чем из трех elementов и если разность между любыми двумя последовательными elementами одинакова. На例, [1,3,5,7,9], [7,7,7] и [3,-1,-5,-9] являются арифметическими последовательностями. Если задан 整数 配列 nums, return количество арифметических под配列ов 配列а nums. Под配列 - это непрерывная subsequence 配列а.
例:
Input: nums = [1,2,3,4]
Output: 3
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++ 解法
自動ドラフト、提出前に確認#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 解法
照合済み/オリジナル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 解法
照合済み/オリジナル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 解法
照合済み/オリジナル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 解法
照合済み/オリジナル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
Пройдите по 配列у, инициализируя два указателя: начальный и текущий. Начните с первой пары elementов.
Для каждой пары elementов проверяйте, сохраняется ли разность между последовательными elementами. Если да, увеличивайте длину текущей арифметической последовательности. Если нет, сбрасывайте начальную позицию и начинайте новую последовательность.
Суммируйте количество найденных арифметических под配列ов, given, что для каждого арифметического под配列а длины len, количество таких под配列ов равно (len - 2).
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.