zoukankan      html  css  js  c++  java
  • surrounded-regions merge-intervals

    最近刷了leetcode上有关数组的题,在这里做一个总结。

    1. surrounded-regions

    思路:将所有能被包围的'O'全部转化为’X‘  =>  除了边界上以及所有与边界上的’O‘相连的’O‘全部被转化。

    知识点:dfs深度遍历边界上以及所有与边界上的’O‘相连的’O‘

    class Solution {
    public:
        int rownum = 0;
        int colnum = 0;
        void solve(vector<vector<char>> &board) {
            if(board.size()==0)return;
            if(board.at(0).size()==0)return;
            rownum = board.size();
            colnum = board[0].size();
            for(int i=0;i<rownum;i++){
                dfs(board,i,0);
                dfs(board,i,colnum-1);
            }
            for(int i=0;i<colnum;i++){
                dfs(board,0,i);
                dfs(board,rownum-1,i);
            }
            for(int i=0;i<rownum;i++){
                for(int j=0;j<colnum;j++){
                    if(board[i][j]=='O')
                        board[i][j]='X';
                }
            }
            for(int i=0;i<rownum;i++){
                for(int j=0;j<colnum;j++){
                    if(board[i][j]=='*')
                        board[i][j]='O';
                }
            }
        }
        void dfs(vector<vector<char>> &board,int row,int col){
            if(board[row][col]=='O'){
                board[row][col]='*';
                if(row<rownum-1)dfs(board,row+1,col);
                if(row>0)dfs(board,row-1,col);
                if(col<colnum-1)dfs(board,row,col+1);
                if(col>0)dfs(board,row,col-1);
            }
            
        }
    };

    2. merge-intervals

    思路:思路很简单先按每个数组起始位置的大小顺序排列好,然后不断从前往后合并即可。这种题一定要考虑特殊情况,比如如果输入为空或只输入一个数组的时候,不要只考虑普遍情况而出现数组越界。

     1 class Solution {
     2 public:
     3     static bool compare(Interval a,Interval b){
     4         return (a.start<b.start);
     5     }
     6     vector<Interval> merge(vector<Interval> &intervals) {
     7         int num=0;
     8         if(intervals.size()==0||intervals.size()==1)return intervals;10         sort(intervals.begin(),intervals.end(),compare);
    11         for(int i=1;i<intervals.size();i++){
    12             if(intervals[i].end>=intervals[i-1].start&&intervals[i].start<=intervals[i-1].end){
    13                 intervals[i].start=min(intervals[i].start,intervals[i-1].start);
    14                 intervals[i].end=max(intervals[i].end,intervals[i-1].end);
    15                 intervals[i-1].start=-1000000;
    16                 num++;
    17             }
    18        }
    19         vector<Interval> res;
    20         for(int i=0;i<intervals.size();i++){
    21             if(intervals[i].start!=-1000000)
    22                 res.push_back(intervals.at(i));
    23         }           
    24         return res;
    25     }
    26 };
  • 相关阅读:
    java实现第六届蓝桥杯灾后重建
    java实现第六届蓝桥杯打印菱形
    java实现第六届蓝桥杯打印菱形
    java实现第六届蓝桥杯九数分三组
    java实现第六届蓝桥杯九数分三组
    java实现第六届蓝桥杯打印菱形
    java实现第六届蓝桥杯九数分三组
    java实现第六届蓝桥杯九数分三组
    java实现第六届蓝桥杯九数分三组
    java实现第六届蓝桥杯打印菱形
  • 原文地址:https://www.cnblogs.com/xctcherry/p/8505976.html
Copyright © 2011-2022 走看看