【LeetCode】第 77 场双周赛

71 阅读1分钟

第一题

image.png

class Solution {
    public int countPrefixes(String[] words, String s) {
         int res = 0;
        for(String w : words){
            if(s.startsWith(w)){
                res++;
            }
        }
        return res;
    }
}

第二题

image.png

前缀和

class Solution {
public:
   int minimumAverageDifference(vector<int>& nums) {
       int n = nums.size();
       vector<long long> f(n+1);
       for(int i=1; i<=n; i++) {
           f[i] = f[i-1]+nums[i-1];
       }
       int res = INT_MAX, index = 1;
       for(int i=1; i<=n; i++){
           int u = abs((f[i]/i)- (i == n ? 0 : (f[n]-f[i])/(n-i)));
           if(u < res){
               index = i;
               res = u;
           }
       }
       return index-1;
   }
};

第三题

image.png

模拟

class Solution {
public:
   int dx[4] = {-1,0, 1, 0};
   int dy[4] = {0, 1, 0, -1};
   int countUnguarded(int m, int n, vector<vector<int>>& guards, vector<vector<int>>& walls) {
       vector<vector<int>> g(m, vector<int>(n));
       for(auto& w : walls){
           g[w[0]][w[1]] = 2;
       }
       for(auto& c : guards){
           g[c[0]][c[1]] = 1;
       }
       for (auto& c : guards) {
           int x = c[0], y = c[1];
           for(int i=0; i<4; i++){
               int nx = x+dx[i];
               int ny = y+dy[i];
               while(nx >=0 && nx < m && ny >=0 && ny < n && g[nx][ny] != 2 && g[nx][ny] != 1){
                   g[nx][ny] = 3;
                   nx += dx[i];
                   ny += dy[i];
               }
           }
       }
       int res =0;
       for(int i=0; i<m; i++){
           for(int j=0; j<n; j++){
               if(g[i][j] == 0) res++;
           }
       }
       return res;
   }
};