標籤:c++ leetcode 二分尋找 數組置0
Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
因為沒有額外的空間,我們可以採用第一個0元素所在的行和列來儲存0元素的資訊。
void setZeroes(vector<vector<int>>& matrix) { int m = matrix.size(); int n = matrix[0].size(); int x = -1, y = -1; for (int i = 0; i<m; i++) { for (int j = 0; j<n; j++) { if (matrix[i][j] == 0) { if (x == -1 && y == -1) { x = i; y = j; } else { matrix[x][j] = 0; matrix[i][y] = 0; } } } } if (x == -1 || y == -1) return; for (int i = 0; i < n; i++) { if (i!=y&&matrix[x][i] == 0) { for (int j = 0; j < m; j++) { matrix[j][i] = 0; } } } for (int i = 0; i < m; i++) { if (i!=x&&matrix[i][y] == 0) { for (int j = 0; j < n; j++) { matrix[i][j] = 0; } } } for (int i = 0; i < m; i++) matrix[i][y] = 0; for (int j = 0; j < n; j++) matrix[x][j] = 0; }
2 Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.The first integer of each row is greater than the last integer of the previous row.
For example, Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
該題是一道比較簡單的二分尋找的題,只需將一維數組下標轉為對應的二維數組下標。
bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); if(m==0) return false; int n=matrix[0].size(); int begin=0,end=m*n-1,mid=0,row=0,col=0; while(begin<=end) { mid=(begin+end)/2; row=mid/n; col=mid%n; if(matrix[row][col]==target) return true; else if(matrix[row][col]>target) end=mid-1; else begin=mid+1; } return false; }
LeetCode的medium題集合(C++實現)十三