列表

详情


1826. 有缺陷的传感器

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

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

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

可以确定的是,最多有一个 传感器有缺陷。请返回这个有缺陷的传感器的编号 (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 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int badSensor(vector<int>& sensor1, vector<int>& sensor2) { } };

java 解法, 执行用时: 0 ms, 内存消耗: 40.3 MB, 提交时间: 2023-10-15 15:26:59

class Solution {
    public int badSensor(int[] sensor1, int[] sensor2) {
        int rst = -1;
        int index = 0;
        for ( ; index < sensor1.length - 1; index++) {
            if (sensor1[index] != sensor2[index]) break;
        }
        // System.out.println(index + " " + sensor1.length);
        if (index == sensor1.length - 1) return rst;
        boolean bad1 = badS(sensor1, sensor2, index);
        boolean bad2 = badS(sensor2, sensor1, index);

        if (bad1 && bad2) {
            rst = -1;
        } else if (bad1) {
            rst = 1;
        } else if (bad2) {
            rst = 2;
        }

        return rst;
    }

    public boolean badS(int[] sensor1, int[] sensor2, int index) {
        for (; index < sensor2.length - 1; index++) {
            if (sensor1[index] != sensor2[index + 1]) return false;
        }
        return true;
    }
}

python3 解法, 执行用时: 32 ms, 内存消耗: 16 MB, 提交时间: 2023-10-15 15:26:05

class Solution:
    def badSensor(self, sensor1: List[int], sensor2: List[int]) -> int:
        n = len(sensor1)

        i = 0  
        while i < n:
            if sensor1[i] != sensor2[i]:
                break       #从左往右第一次不同的位置
            i += 1

        if n - 1 <= i:      #如果只是最后一位不同,或者完全相同
            return -1       #无法判断

        lose = -1
        
        if sensor1[i+1: ] == sensor2[i:-1] and sensor1[i] != sensor2[-1]:
            lose = 2
        if sensor2[i+1: ] == sensor1[i:-1] and sensor2[i] != sensor1[-1]:
            if lose == 2:
                lose = -1       #2个都成立,则判断不出到底是哪个
            else:
                lose = 1
        return lose

golang 解法, 执行用时: 4 ms, 内存消耗: 2.6 MB, 提交时间: 2023-10-15 15:24:22

func badSensor1(sensor1 []int, sensor2 []int) int {
    n1:=len(sensor1)
    i:=0
    for ;i<n1 && sensor1[i]==sensor2[i] ;i++{
    }
    j:=i
    for ;j<n1-1 && sensor1[j]==sensor2[j+1];j++{
    }
    k:=i
    for ;k<n1-1 && sensor1[k+1]==sensor2[k];k++{

    }
    if (j==n1-1 && k==n1-1) || i==n1-1{
        return -1
    }

    if j==n1-1{
        return 1
    }
    if k==n1-1{
        return 2
    }
    return -1
}


func badSensor(sensor1 []int, sensor2 []int) int {
	idx := len(sensor1)
	for i := 0; i < len(sensor1); i++ {
		if sensor1[i] != sensor2[i] {
			idx = i
			break
		}
	}
	if idx >= len(sensor1) - 1 {
		return -1
	}
	f1, f2 := reflect.DeepEqual(sensor1[idx:len(sensor1)-1], sensor2[idx+1:]), reflect.DeepEqual(sensor2[idx:len(sensor1)-1], sensor1[idx+1:])
	if f1 && f2 {
		return -1
	}
	if f1 {
		return 1
	}
	return 2
}

上一题