LeetCode的medium題集合(C++實現)十三

來源:互聯網
上載者:User

標籤: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++實現)十三

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.