CCI: Count negative numbers in matrix

Given a matrix in which each row and each column is sorted, write a method to find the number of negative elements in it.

类似于在排序矩阵中查找元素 (CCI: Find in Matrix)- 尝试一下折半,抛弃1/4的区域,顺便重写一下。

bool findInMatrix(vector<vector<int>> &mat, int target, int rl, int ru, int cl, int cu) {
	if (rl > ru || cl > cu) {
		return false;
	}

	if (target < mat[rl][cl] || target > mat[ru][cu]) {
		return false;
	}

	int rmid = (rl + ru) / 2;
	int cmid = (cl + cu) / 2;
	if (mat[rmid][cmid] == target) {
		return true;
	}
	else if (mat[rmid][cmid] < target) {
		return findInMatrix(mat, target, rmid + 1, ru, cl, cmid)
			|| findInMatrix(mat, target, rl, ru, cmid + 1, cu);
	}
	else {
		return findInMatrix(mat, target, rl, rmid - 1, cmid, cu)
			|| findInMatrix(mat, target, rl, ru, cl, cmid - 1);
	}
}

void findInMatrixTest() {
	int rows = 4, cols = 5;
	int array2d[][5] = {
		{1,  8,  12, 20, 30},
		{4,  9,  13, 25, 32},
		{10, 11, 27, 28, 40},
		{12, 18, 36, 41, 56}
	};

	vector<vector<int>> matrix(rows, vector<int>(cols));
	for (int i = 0; i < rows; ++i) {
		matrix[i] = vector<int>(array2d[i], array2d[i] + cols);
	}
	
	cout << "Number 0  " << (findInMatrix(matrix,  0, 0, rows - 1, 0, cols - 1) ? "found" : "not found") << endl;
	cout << "Number 1  " << (findInMatrix(matrix,  1, 0, rows - 1, 0, cols - 1) ? "found" : "not found") << endl;
	cout << "Number 12 " << (findInMatrix(matrix, 12, 0, rows - 1, 0, cols - 1) ? "found" : "not found") << endl;
	cout << "Number 33 " << (findInMatrix(matrix, 33, 0, rows - 1, 0, cols - 1) ? "found" : "not found") << endl;
	cout << "Number 56 " << (findInMatrix(matrix, 56, 0, rows - 1, 0, cols - 1) ? "found" : "not found") << endl;
}

int countNegativeInMatrix(vector<vector<int>> &mat, int rl, int ru, int cl, int cu) {
	if (rl > ru || cl > cu) {
		return 0;
	}

	if (mat[rl][cl] >= 0) {
		return 0;
	}
	if (mat[ru][cu] < 0) {
		return (ru - rl + 1) * (cu - cl + 1);
	}

	int rmid = (rl + ru) / 2;
	int cmid = (cl + cu) / 2;
	if (mat[rmid][cmid] < 0) {
		return countNegativeInMatrix(mat, rmid + 1, ru, cl, cmid) +
			countNegativeInMatrix(mat, rl, ru, cmid + 1, cu) +
			(rmid - rl + 1) * (cmid - cl + 1);
	}
	else {
		return countNegativeInMatrix(mat, rl, rmid - 1, cmid, cu) +
			countNegativeInMatrix(mat, rl, ru, cl, cmid - 1);
	}
}

void countNegativeInMatrixTest() {
	int rows = 4, cols = 5;
	int array2d[][5] = {
		{-10, -8, -7, 20, 30},
		{-6,  -1, 13, 25, 32},
		{-2,  11, 27, 28, 40},
		{-1,  18, 36, 41, 56}
	};

	vector<vector<int>> matrix(rows, vector<int>(cols));
	for (int i = 0; i < rows; ++i) {
		matrix[i] = vector<int>(array2d[i], array2d[i] + cols);
	}

	cout << "The negative number is: " << countNegativeInMatrix(matrix, 0, rows - 1, 0, cols - 1) << endl;
}

这段内核日志中的错误信息涉及相机的 CCI(Camera Control Interface)和 EEPROM(Electrically Erasable Programmable Read-Only Memory)模块。根据日志信息,可以看出发生了以下错误: 1. CAM-CCI: cam_cci_read: 1453 CCI1_I2C_M1_Q1 ERROR with Slave 0xa2 这个错误表示在与从设备地址为0xa2的设备进行通信时发生了错误。 2. CAM-CCI: cam_cci_read_bytes: 1816 CCI1_I2C_M1 Failed to read rc:-22 这个错误表示在读取数据时发生了错误,返回值为-22。 3. CAM-CCI: cam_cci_core_cfg: 2023 rc: -22 这个错误表示在配置相机控制接口时发生了错误,返回值为-22。 4. CAM-EEPROM: cam_eeprom_read_memory: 114 read failed rc -22 这个错误表示在读取 EEPROM 存储器中的数据时发生了错误,返回值为-22。 5. CAM-EEPROM: cam_eeprom_pkt_parse: 1329 read_eeprom_memory failed 这个错误表示在解析 EEPROM 数据包时发生了错误。 6. CAM-EEPROM: cam_eeprom_driver_cmd: 1540 Failed in eeprom pkt Parsing 这个错误表示在 EEPROM 驱动程序命令中解析数据包时发生了错误。 7. CAM-EEPROM: cam_eeprom_subdev_ioctl: 70 Failed in Driver cmd: -22 这个错误表示在 EEPROM 子设备的 IOCTL 命令中发生了错误,返回值为-22。 总体来说,这些错误都与相机的 CCI 和 EEPROM 模块的读取、配置和通信有关。可能的原因包括硬件故障、驱动程序问题或通信问题。你可能需要仔细检查相关的硬件连接、驱动程序和配置,以解决这些错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值