矩阵置零
解题思路:
用第一行和第一列记录这一行和这一列中是否有零,当然,一开始要先用firstRowIsZero 和firstColIsZero 记录第一行和第一列是否有零,最后再根据这个判断是否将第一行第一列置零。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if (matrix.size()<1 || matrix[0].size()<1) return;
bool firstRowIsZero = false,firstColIsZero = false;
for(int i =0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
if(i!=0 && j!=0 && matrix[i][j]==0){
matrix[i][0]=0;
matrix[0][j]=0;
}else if(matrix[i][j]==0){
firstRowIsZero = i==0? true:firstRowIsZero;
firstColIsZero = j==0? true:firstColIsZero;
}
}
}
for(int i=1;i<matrix.size();i++){
for(int j=1;j<matrix[0].size();j++){
if(matrix[0][j]==0 || matrix[i][0] == 0){
matrix[i][j]=0;
}
}
}
//第一列含0
if(firstColIsZero){
for(int i=0;i<matrix.size();i++){
matrix[i][0] = 0;
}
}
//第一行含0
if(firstRowIsZero){
for(int j=0;j<matrix[0].size();j++){
matrix[0][j] = 0;
}
}
}
};
寻找旋转数组中的最小值
class Solution {
public:
int findMin(vector<int>& nums) {
if(nums.size()<=0)
return -1;
if(nums.size()==1)
return nums[0];
if(nums.size()==2)
return nums[0]<nums[1]?nums[0]:nums[1];
int left=0,right=nums.size()-1;
while(left<right) {
if(nums[left]<nums[right])
return nums[left];
else {
left++;
}
}
return nums[left];
}
};