leetcode刷题——矩阵置零、寻找旋转数组中的最小值

矩阵置零

解题思路:
用第一行和第一列记录这一行和这一列中是否有零,当然,一开始要先用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];
        
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值