zoukankan      html  css  js  c++  java
  • LeetCode Weekly Contest 21

    1. 530. Minimum Absolute Difference in BST

    最小的差一定发生在有序数组的相邻两个数之间,所以对每一个数,找他的前驱和后继,更新结果即可!再仔细一想,bst的中序遍历就是有序数组,每次记录上一个数字,求他们的差,更新结果即可!

     1 class Solution {
     2 public:
     3     int res;
     4     int x;
     5     void work(TreeNode* root) {
     6         if(!root) return;
     7         if(root->left) work(root->left);
     8         if(x != -1) {
     9             res = min(res, abs(x - root->val));
    10         }
    11         x = root->val;
    12         if(root->right) work(root->right);
    13     }
    14     int getMinimumDifference(TreeNode* root) {
    15         res = INT_MAX;
    16         x = -1;
    17         work(root);
    18         return res;
    19     }
    20 };
    View Code

    2.  523. Continuous Subarray Sum

    这题,我太坑了,错了4次,导致罚时非常多!

    一看这题,不很简单么!1. 求连续的和为某一个数,用前缀和处理一下就好了, 2. 求是k的倍数,倍数很多怎么办,转化为求余数即可。(然后你就注意到:如果k=0,怎么解决,这是个大坑啊!)。

    这题一定注意,长度要大于等于2啊!时刻牢记!

     1 class Solution {
     2 public:
     3     bool checkSubarraySum(vector<int>& nums, int k) {
     4         int n = nums.size();
     5         if(n < 2) return 0;
     6         if(k == 0) {
     7             for (int i = 0; i < n - 1; i++) {
     8                 if(nums[i] + nums[i + 1] == 0) return 1;
     9             }
    10             return 0;
    11         }
    12         int s = 0;
    13         set<int> se;
    14         int c = 0;
    15         for (int x : nums) {
    16             s += x;
    17             c++;
    18             s %= k;
    19             if(s == 0 && c > 1) return 1;
    20             if(se.count(s)) return 1;
    21             se.insert(s);
    22         }
    23         return 0;
    24     }
    25 };
    View Code

    我这个代码好像还不对,没有判读长度为2的情况!会不会重判,上面的代码,显然是错误的!

    采用map记录一下下标!

     1 class Solution {
     2 public:
     3     bool checkSubarraySum(vector<int>& nums, int k) {
     4         int n = nums.size();
     5         if(n < 2) return 0;
     6         if(k == 0) {
     7             for (int i = 0; i < n - 1; i++) {
     8                 if(nums[i] + nums[i + 1] == 0) return 1;
     9             }
    10             return 0;
    11         }
    12         int s = 0;
    13         set<int> se;
    14         map<int, int> ma;
    15         int c = 0;
    16         for (int x : nums) {
    17             s += x;
    18             c++;
    19             s %= k;
    20             if(s == 0 && c > 1) return 1;
    21             if(se.count(s) && (c - ma[s]) >= 2) return 1;
    22             se.insert(s);
    23             ma[s] = c;
    24         }
    25         return 0;
    26     }
    27 };
    View Code

    3. 524. Longest Word in Dictionary through Deleting

    这题就是暴力,先对字典排序,然后逐个比较,返回。

     1 class Solution {
     2 public:
     3 string findLongestWord(string s, vector<string>& d) {
     4     int n = s.size();
     5     if(n == 0) return s;
     6     int m = d.size();
     7     if(m == 0) return "";
     8     sort(d.begin(), d.end(), [&](string x, string y) {
     9             if(x.size() == y.size()) return x < y;
    10             return x.size() > y.size();
    11         });
    12     for (string x : d) {
    13         if(x.size() > n) continue;
    14         int i, j;
    15         i = j = 0;
    16         int len = x.size();
    17         while(i < n && j < len) {
    18             if(s[i] == x[j]) {
    19                 i++; j++;
    20             } else i++;
    21         }
    22         if(j == len) {
    23             return x;
    24         }
    25     }
    26     return "";
    27 }
    28 };
    View Code

    4. 529. Minesweeper

    我就想,这次的最后一题分值有点小啊!原来是medium的!

    理解题意,考虑各种情况,然后就是做一个bfs,记住判重和边界条件。

     1 class Solution {
     2 public:
     3 int n, m;
     4 bool check(int x, int y) {
     5     if(x >= 0 && x < n && y >= 0 && y < m) return 1;
     6     return 0;
     7 }
     8 vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
     9     n = board.size(), m = board[0].size();
    10     int x = click[0], y = click[1];
    11     if(board[x][y] == 'M') {
    12         board[x][y] = 'X';
    13         return board;
    14     }
    15     int s = 0;
    16     for (int i = -1; i <= 1; i++) {
    17         for (int j = -1; j <= 1; j++) {
    18             int cx = x + i, cy = y + j;
    19             if(!check(cx, cy)) continue;
    20             s += board[cx][cy] == 'M';
    21         }
    22     }
    23     if(s != 0) {
    24         board[x][y] = '0' + s;
    25         return board;
    26     }
    27     vector<vector<bool>> in(n, vector<bool>(m, 0));
    28     queue<pair<int, int>> q;
    29     q.push({x, y});
    30     while(!q.empty()) {
    31         auto t = q.front(); q.pop();
    32         x = t.first, y = t.second;
    33         s = 0;
    34         for (int i = -1; i <= 1; i++) {
    35             for (int j = -1; j <= 1; j++) {
    36                 int cx = x + i, cy = y + j;
    37                 if(!check(cx, cy)) continue;
    38                 s += board[cx][cy] == 'M';
    39             }
    40         }
    41         if(s == 0) {
    42             board[x][y] = 'B';
    43             for (int i = -1; i <= 1; i++) {
    44                 for (int j = -1; j <= 1; j++) {
    45                     int cx = x + i, cy = y + j;
    46                     if(!check(cx, cy)) continue;
    47                     if(board[cx][cy] == 'E' && !in[cx][cy]) {
    48                         q.push({cx, cy});
    49                         in[cx][cy] = 1;
    50                     }
    51                 }
    52             }
    53         } else {
    54             board[x][y] = '0' + s;
    55         }
    56     }
    57 
    58     return board;
    59 }
    60 };
    View Code
  • 相关阅读:
    从搭eclipse环境到导入maven工程
    基于jquery的多选下拉列框再次更改样式和交互
    BootStrap的typeahead使用过程中遇到的问题
    Vue webapp项目通过HBulider打包原生APP
    微信相机
    前端小新手,记录项目中不懂的问题
    判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
    JavaScript学习笔记(一)——Map、Set与iterable
    oracle nvl函数
    mybaits中主键自动生成并返回主键
  • 原文地址:https://www.cnblogs.com/y119777/p/6444508.html
Copyright © 2011-2022 走看看