返回介绍

solution / 1800-1899 / 1826.Faulty Sensor / README

发布于 2024-06-17 01:03:14 字数 4367 浏览 0 评论 0 收藏 0

1826. 有缺陷的传感器

English Version

题目描述

实验室里正在进行一项实验。为了确保数据的准确性,同时使用 两个 传感器来采集数据。您将获得2个数组 sensor1 and sensor2,其中 sensor1[i] 和 sensor2[i] 分别是两个传感器对i数据点采集到的数据。

但是,这种类型的传感器有可能存在缺陷,它会导致 某一个 数据点采集的数据(掉落值)被丢弃。

数据被丢弃后,所有在其右侧的数据点采集的数据,都会被向左移动一个位置,最后一个数据点采集的数据会被一些随机值替换。可以保证此随机值不等于掉落值。

  • 举个例子, 如果正确的数据是 [1,2,_3_,4,5] , 此时 3 被丢弃了, 传感器会返回 [1,2,4,5,_7_] (最后的位置可以是任何值, 不仅仅是 7).

可以确定的是,最多有一个 传感器有缺陷。请返回这个有缺陷的传感器的编号 (12)。如果任一传感器 没有缺陷 ,或者 无法 确定有缺陷的传感器,则返回 -1

 

示例 1:

输入:sensor1 = [2,3,4,5], sensor2 = [2,1,3,4]
输出:1
解释:传感器 2 返回了所有正确的数据.
传感器2对第二个数据点采集的数据,被传感器1丢弃了,传感器1返回的最后一个数据被替换为 5 。

示例 2:

输入:sensor1 = [2,2,2,2,2], sensor2 = [2,2,2,2,5]
输出:-1
解释:无法判定哪个传感器是有缺陷的。
假设任一传感器丢弃的数据是最后一位,那么,另一个传感器就能给出与之对应的输出。

示例 3:

输入:sensor1 = [2,3,2,2,3,2], sensor2 = [2,3,2,3,2,7]
输出:2
解释:传感器 1 返回了所有正确的数据.
传感器 1 对第四个数据点的采集数据,被传感器2丢失了, 传感器 2 返回的最后一个数据被替换为 7 。

 

提示:

  • sensor1.length == sensor2.length
  • 1 <= sensor1.length <= 100
  • 1 <= sensor1[i], sensor2[i] <= 100

解法

方法一:遍历

遍历两个数组,找到第一个不相等的位置 $i$。如果 $i \lt n - 1$,循环比较 $sensor1[i + 1]$ 和 $sensor2[i]$,如果不相等,说明传感器 $1$ 有缺陷,返回 $1$;否则比较 $sensor1[i]$ 和 $sensor2[i + 1]$,如果不相等,说明传感器 $2$ 有缺陷,返回 $2$。

遍历结束,说明无法确定有缺陷的传感器,返回 $-1$。

时间复杂度 $O(n)$,其中 $n$ 为数组长度。空间复杂度 $O(1)$。

class Solution:
  def badSensor(self, sensor1: List[int], sensor2: List[int]) -> int:
    i, n = 0, len(sensor1)
    while i < n - 1:
      if sensor1[i] != sensor2[i]:
        break
      i += 1
    while i < n - 1:
      if sensor1[i + 1] != sensor2[i]:
        return 1
      if sensor1[i] != sensor2[i + 1]:
        return 2
      i += 1
    return -1
class Solution {
  public int badSensor(int[] sensor1, int[] sensor2) {
    int i = 0;
    int n = sensor1.length;
    for (; i < n - 1 && sensor1[i] == sensor2[i]; ++i) {
    }
    for (; i < n - 1; ++i) {
      if (sensor1[i + 1] != sensor2[i]) {
        return 1;
      }
      if (sensor1[i] != sensor2[i + 1]) {
        return 2;
      }
    }
    return -1;
  }
}
class Solution {
public:
  int badSensor(vector<int>& sensor1, vector<int>& sensor2) {
    int i = 0;
    int n = sensor1.size();
    for (; i < n - 1 && sensor1[i] == sensor2[i]; ++i) {}
    for (; i < n - 1; ++i) {
      if (sensor1[i + 1] != sensor2[i]) return 1;
      if (sensor1[i] != sensor2[i + 1]) return 2;
    }
    return -1;
  }
};
func badSensor(sensor1 []int, sensor2 []int) int {
  i, n := 0, len(sensor1)
  for ; i < n-1 && sensor1[i] == sensor2[i]; i++ {
  }
  for ; i < n-1; i++ {
    if sensor1[i+1] != sensor2[i] {
      return 1
    }
    if sensor1[i] != sensor2[i+1] {
      return 2
    }
  }
  return -1
}
function badSensor(sensor1: number[], sensor2: number[]): number {
  let i = 0;
  const n = sensor1.length;
  while (i < n - 1) {
    if (sensor1[i] !== sensor2[i]) {
      break;
    }
    ++i;
  }
  while (i < n - 1) {
    if (sensor1[i + 1] !== sensor2[i]) {
      return 1;
    }
    if (sensor1[i] !== sensor2[i + 1]) {
      return 2;
    }
    ++i;
  }
  return -1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文