class Solution {
public:
int badSensor(vector<int>& sensor1, vector<int>& sensor2) {
}
};
1826. 有缺陷的传感器
实验室里正在进行一项实验。为了确保数据的准确性,同时使用 两个 传感器来采集数据。您将获得2个数组 sensor1
and sensor2
,其中 sensor1[i]
和 sensor2[i]
分别是两个传感器对第 i
个数据点采集到的数据。
但是,这种类型的传感器有可能存在缺陷,它会导致 某一个 数据点采集的数据(掉落值)被丢弃。
数据被丢弃后,所有在其右侧的数据点采集的数据,都会被向左移动一个位置,最后一个数据点采集的数据会被一些随机值替换。可以保证此随机值不等于掉落值。
[1,2,3,4,5]
, 此时 3
被丢弃了, 传感器会返回 [1,2,4,5,7]
(最后的位置可以是任何值, 不仅仅是 7
).可以确定的是,最多有一个 传感器有缺陷。请返回这个有缺陷的传感器的编号 (1
或 2
)。如果任一传感器 没有缺陷 ,或者 无法 确定有缺陷的传感器,则返回 -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
原站题解
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 }