365天挑战LeetCode1000题——Day 081 统计子串中的唯一字符 地图分析 太平洋大西洋水流问题
828. 统计子串中的唯一字符
按贡献值,也就是每个字符可能在多少个字符串中出现来进行计算,大大降低了复杂度
代码实现(部分看题解)
class Solution {public:int uniqueLetterString(string s) {unordered_map<char, vector<int>> index;int ans = 0;for (int i = 0; i < s.size(); i++) {index[s[i]].push_back(i);}for (auto &&[_, arr] : index) {arr.insert(arr.begin(), -1);arr.emplace_back(s.size());for (int i = 1; i < arr.size() - 1; i++) {ans += (arr[i] - arr[i - 1]) * (arr[i + 1] - arr[i]);}}return ans;}
};
1162. 地图分析
代码实现(自解)
class Solution {public:int maxDistance(vector<vector<int>>& grid) {bool flag1 = false, flag2 = false;queue<pair<int, int>> myQueue;for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j]) {flag1 = true;myQueue.push({i, j});}else flag2 = true;}}if (!flag1 || !flag2) return -1;int ans = 1;while (!myQueue.empty()) {auto [i, j] = myQueue.front();// cout << i << " " << j << endl;myQueue.pop();if (i - 1 >= 0 && !grid[i - 1][j]) {grid[i - 1][j] = grid[i][j] == 1 ? - 1 : grid[i][j] - 1;ans = max(ans, -grid[i - 1][j]);myQueue.push({i - 1, j});}if (i + 1 < grid.size() && !grid[i + 1][j]) {grid[i + 1][j] = grid[i][j] == 1 ? - 1 : grid[i][j] - 1;ans = max(ans, -grid[i + 1][j]);myQueue.push({i + 1, j}); }if (j - 1 >= 0 && !grid[i][j - 1]) {grid[i][j - 1] = grid[i][j] == 1 ? - 1 : grid[i][j] - 1;ans = max(ans, -grid[i][j - 1]);myQueue.push({i, j - 1}); }if (j + 1 < grid.size() && !grid[i][j + 1]) {grid[i][j + 1] = grid[i][j] == 1 ? - 1 : grid[i][j] - 1;ans = max(ans, -grid[i][j + 1]);myQueue.push({i, j + 1}); }}return ans;}
};
417. 太平洋大西洋水流问题
代码实现(自解)
class Solution {public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {int m = heights.size();int n = heights[0].size();vector<vector<bool>> pacific(m, vector<bool>(n, false));vector<vector<bool>> atlantic(m, vector<bool>(n, false));queue<pair<int, int>> queue1, queue2;for (int i = 0; i < n; i++) {pacific[0][i] = true;queue1.push({0, i});atlantic[m - 1][i] = true;queue2.push({m - 1, i});}for (int j = 1; j < m; j++) {pacific[j][0] = true;queue1.push({j , 0});atlantic[m - j - 1][n - 1] = true;queue2.push({m - j - 1, n - 1});}while (!queue1.empty()) {auto[i, j] = queue1.front();queue1.pop();if (i - 1 >= 0 && heights[i - 1][j] >= heights[i][j]) {if (!pacific[i - 1][j]) {pacific[i - 1][j] = true;queue1.push({i - 1, j});}}if (i + 1 < m && heights[i + 1][j] >= heights[i][j]) {if (!pacific[i + 1][j]) {pacific[i + 1][j] = true;queue1.push({i + 1, j});}} if (j - 1 >= 0 && heights[i][j - 1] >= heights[i][j]) {if (!pacific[i][j - 1]) {pacific[i][j - 1] = true;queue1.push({i, j - 1});}}if (j + 1 < n && heights[i][j + 1] >= heights[i][j]) {if (!pacific[i][j + 1]) {pacific[i][j + 1] = true;queue1.push({i, j + 1});}}}while (!queue2.empty()) {auto[i, j] = queue2.front();queue2.pop();if (i - 1 >= 0 && heights[i - 1][j] >= heights[i][j]) {if (!atlantic[i - 1][j]) {atlantic[i - 1][j] = true;queue2.push({i - 1, j});}}if (i + 1 < m && heights[i + 1][j] >= heights[i][j]) {if (!atlantic[i + 1][j]) {atlantic[i + 1][j] = true;queue2.push({i + 1, j});}} if (j - 1 >= 0 && heights[i][j - 1] >= heights[i][j]) {if (!atlantic[i][j - 1]) {atlantic[i][j - 1] = true;queue2.push({i, j - 1});}}if (j + 1 < n && heights[i][j + 1] >= heights[i][j]) {if (!atlantic[i][j + 1]) {atlantic[i][j + 1] = true;queue2.push({i, j + 1});}}}vector<vector<int>> ans;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (pacific[i][j] && atlantic[i][j])ans.push_back({i, j});}}return ans;}
};
365天挑战LeetCode1000题——Day 081 统计子串中的唯一字符 地图分析 太平洋大西洋水流问题相关推荐
- LeetCode 828. 统计子串中的唯一字符(中心扩展)
1. 题目 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ,则其中 &qu ...
- 828. 统计子串中的唯一字符
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ,则其中 "L&q ...
- 365天挑战LeetCode1000题——Day 126 单调栈模板 500题纪念
用时126天,完成500题,平均4题/天,照这个速率,我还需要四个月完成1000题挑战. 单调栈模板 class Solution {public:vector<int> nextGrea ...
- 365天挑战LeetCode1000题——Day 260 800题
时过但境还没迁,一晃眼过去了4个月,在同样的位置发了博客. 今天完成了第八百道题,然后距离我的365天千题计划,还剩下100天左右,每天再保持两题的刷题量,就能完成我一年前定下的目标了.这也再次证明了 ...
- 365天挑战LeetCode1000题——Day 116 第315场周赛 「中国银联 力扣」
6204. 与对应负数同时存在的最大正整数 代码实现 class Solution {public:int findMaxK(vector<int>& nums) {sort(nu ...
- 365天挑战LeetCode1000题——Day 014 每日一题 + 最长公共子序列
文章目录 1. [我能赢吗](https://leetcode.cn/problems/can-i-win/) 1.1 记忆化搜索+DFS+位运算 2. [最长公共子序列](https://leetc ...
- 365天挑战LeetCode1000题——Day 012 每日一题
文章目录 前言 1. [寻找右区间](https://leetcode.cn/problems/find-right-interval/) 1.1 二分查找 总结 前言 今天还是一题,但是重新学习了快 ...
- 365天挑战LeetCode1000题——Day 103 400题 检查二进制字符串字段 最大子序列交替和 最低票价 K 站中转内最便宜的航班
400题,用时103天,平均3.88题/天,预计154天,也就是5个月后完成目标 1784. 检查二进制字符串字段 代码实现(模拟) class Solution {public:bool check ...
- 365天挑战LeetCode1000题——Day 097 神策专场: 判定是否互为字符重排 按身高排序 按位与最大的最长子数组 找到所有好下标 好路径的数目
面试题 01.02. 判定是否互为字符重排 代码实现(排序) class Solution {public:bool CheckPermutation(string s1, string s2) {s ...
最新文章
- java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...
- 如何用九条命令在一分钟内检查 Linux 服务器性能?
- python基础教程:名称空间与作用域
- linux 为什么编译内核,Linux内核编译与安装
- linux 中文文件名不能下载不了,linux 64位系统 mod_encoding解决中文文件名不能下载问题...
- PHP基础学习之数组使用要点
- oracle 磁盘挂载格式化,Linux简单磁盘挂载
- 不止 5G 和鸿蒙,华为最新大招,扔出 AI 计算核弹
- java对字符串归一化_搜索引擎中的字符串归一化 | 学步园
- 指针与引用的混合使用总结
- Linux中断技术、门描述符、IDT(中断描述符表)、异常控制技术总结归类
- 未来三年分布式光伏必然爆发
- 哈工大同义词词林 python 使用范例
- 游戏应用快速审核上架
- 苹果开发☀️ 一、Unity开发苹果应用流程
- Redis_Study
- “Entity Data Modle Designer 无法显示”的问题
- 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组解析
- SG3525频率和占空比参数的选取
- LTR问题 position debias方法