码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode的medium题集合(C++实现)十三

时间:2015-05-25 13:08:36      阅读:155      评论:0      收藏:0      [点我收藏+]

标签: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++实现)十三

标签:c++   leetcode   二分查找   数组置0   

原文地址:http://blog.csdn.net/zhulong890816/article/details/45967629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!