华为OD机试 - 多段线数据压缩(Java & JS & Python & C & C++)
题目描述:
给定一个由无符号整数组成的数组,数组中的值构成一个数字流。写一个函数,如果数字流中存在连续的三个数值,它们的和为0,则返回true。
解决方案:
这个问题可以通过遍历数组并检查每三个连续的数值来解决。如果它们的和为0,则返回true。否则,继续遍历直到找到一组符合条件的数值或遍历结束。
以下是各种语言的解决方案:
Java:
public class Main {
public static void main(String[] args) {
int[] data = {1, -2, 3, -4, 5};
System.out.println(containsZeroSumTriplet(data));
}
public static boolean containsZeroSumTriplet(int[] data) {
for (int i = 0; i < data.length - 2; i++) {
for (int j = i + 1; j < data.length - 1; j++) {
if ((data[i] + data[j] + data[j + 1]) == 0) {
return true;
}
}
}
return false;
}
}
JavaScript:
function containsZeroSumTriplet(data) {
for (let i = 0; i < data.length - 2; i++) {
for (let j = i + 1; j < data.length - 1; j++) {
if ((data[i] + data[j] + data[j + 1]) === 0) {
return true;
}
}
}
return false;
}
let data = [1, -2, 3, -4, 5];
console.log(containsZeroSumTriplet(data));
Python:
def contains_zero_sum_triplet(data):
for i in range(len(data) - 2):
for j in range(i + 1, len(data) - 1):
if data[i] + data[j] + data[j + 1] == 0:
return True
return False
data = [1, -2, 3, -4, 5]
print(contains_zero_sum_triplet(data))
C:
#include <stdio.h>
int containsZeroSumTriplet(int data[], int length) {
for (int i = 0; i < length - 2; i++) {
for (int j = i + 1; j < length - 1; j++) {
if (data[i] + data[j] + data[j + 1] == 0) {
return 1;
}
}
}
return 0;
}
int main() {
int data[] = {1, -2, 3, -4, 5};
printf("%d\n", containsZeroSumTriplet(data, 5));
return 0;
}
C++:
#include <iostream>
#include <vector>
bool containsZeroSumTriplet(const std::vector<int>& data) {
for (size_t i = 0; i < data.size() - 2; i++) {
for (size_t j = i + 1; j < data.size() - 1; j++) {
if ((data[i] + data[j] + data[j + 1]) == 0) {
return
评论已关闭