leetcode-算法基础-5、6、7、8

目录

  • leetcode-算法基础-5、6、7、8
    • 438. 找到字符串中所有字母异位词
    • 713. 乘积小于 K 的子数组
    • 209. 长度最小的子数组
    • 200. 岛屿数量
    • 547. 省份数量
    • 117. 填充每个节点的下一个右侧节点指针 II
    • 1091. 二进制矩阵中的最短路径
    • 130. 被围绕的区域
    • 797. 所有可能的路径

438. 找到字符串中所有字母异位词

class Solution {public:vector<int> findAnagrams(string s, string p) {int n = s.size(), m = p.size();int left = 0, right = 0;vector<int> mp(26), np(26);vector<int> ans;for ( auto& ch : p ){mp[ch-'a']++;}while (right < n){np[s[right]-'a']++;if (right-left == m){np[s[left]-'a']--;left++;}if (mp == np){ans.push_back(left);}right++;}return ans;}
};

713. 乘积小于 K 的子数组

class Solution {public:int numSubarrayProductLessThanK(vector<int>& nums, int k) {int n = nums.size(), ans = 0, tmp = 1;int left = 0, right = 0;while (right < n){tmp *= nums[right];while ( left <= right && tmp >= k ){tmp /= nums[left];left++;}ans += right-left+1;right++;}return ans;}
};

209. 长度最小的子数组

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size(), ans = INT_MAX, tmp = 0;int left = 0, right = 0;while ( right < n ){tmp += nums[right];while ( tmp-nums[left] >= target ){tmp -= nums[left];left++;}if ( tmp >= target ){ans = min(ans, right-left+1);}right++;}return ans == INT_MAX ? 0 : ans;}
};

200. 岛屿数量

class Solution {public:vector<int> dic{-1, 0, 1, 0, -1};void dfs(vector<vector<char>>& grid, int i, int j){int x, y;for ( int k = 0 ; k < 4 ; ++k ){x = i + dic[k], y = j + dic[k+1];if ( x >= 0 && y >= 0 && x < grid.size() && y < grid[0].size() && grid[x][y] == '1' ){grid[x][y] = '0';dfs(grid, x, y);}}}int numIslands(vector<vector<char>>& grid) {int n = grid.size(), m = grid[0].size();int ans = 0;for ( int i = 0 ; i < n ; ++i ){for ( int j = 0 ; j < m ; ++j ){if ( grid[i][j] == '1' ){grid[i][j] = '0';dfs(grid, i, j);ans++;}}}return ans;}
};

547. 省份数量

class Solution {public:void dfs(vector<vector<int>>& isConnected, vector<int>& flag, int n, int i){for ( int j = 0 ; j < n ; ++j ){if ( isConnected[i][j] && !flag[j] ){flag[j] = 1;dfs(isConnected, flag, n, j);}}}int findCircleNum(vector<vector<int>>& isConnected) {int n = isConnected.size();int ans = 0;vector<int> flag(n, 0);for ( int i = 0 ; i < n ; ++i ){if ( !flag[i] ){dfs(isConnected, flag, n, i);ans++;}}return ans;}
};

117. 填充每个节点的下一个右侧节点指针 II

class Solution {public:Node* connect(Node* root) {if (!root){return nullptr;}queue<Node*> q;q.push(root);while(q.size()){int n = q.size();Node* start = nullptr;for ( int i = 0 ; i < n ; ++i ){Node* a = q.front();q.pop();if ( a->left ){q.push(a->left);}if ( a->right ){q.push(a->right);}if ( i != 0 ){start->next = a;}start = a;}}return root;}
};

1091. 二进制矩阵中的最短路径

class Solution {public:vector<vector<int>> dic{{-1,-1}, {-1,0}, {0,-1}, {-1,1}, {1,-1}, {1,1}, {1,0}, {0,1}};int shortestPathBinaryMatrix(vector<vector<int>>& grid) {if(grid[0][0]==1)return -1;int n = grid.size();grid[0][0] = 1;int ans = 1;queue<pair<int, int>> q;q.emplace(0, 0);while (q.size()){int le = q.size();while (le--){auto [a, b] = q.front();q.pop();if ( a == n-1 && b == n-1 ){return ans;}int x, y;for ( int k = 0 ; k < 8 ; ++k ){x = a + dic[k][0];y = b + dic[k][1];if ( x >= 0 && y >= 0 && x < n && y < n && grid[x][y] == 0){q.emplace(x, y);grid[x][y] = 1;}}}++ans;}return -1;}
};

130. 被围绕的区域

class Solution {public:vector<int> dir{-1, 0, 1, 0, -1};void dfs(vector<vector<char>>& board, vector<vector<char>>& flag, int i, int j){if ( i < 0 || j < 0 || i >= board.size() || j >= board[0].size() || board[i][j] == 'X' || flag[i][j] == 'O' ){return;}flag[i][j] = 'O';int x, y;for ( int k = 0 ; k < 4 ; ++k ){x = i + dir[k], y = j + dir[k+1];dfs(board, flag, x, y);}}void solve(vector<vector<char>>& board) {int n = board.size(), m = board[0].size();vector<vector<char>> flag(n, vector<char>(m, 'X'));for ( int i = 0 ; i < n ; ++i ){for ( int j = 0 ; j < m ; ++j ){if ( ( i == 0 || j == 0 || i == n-1 || j == m-1 ) && board[i][j] == 'O' ){dfs(board, flag, i, j);}}}board = flag;}
};

797. 所有可能的路径

class Solution {public:vector<vector<int>> ans;vector<int> tmp{0};void dfs(vector<vector<int>>& graph, int i, int  n){if ( i == n-1 ){ans.push_back(tmp);return ;}for ( int k = 0 ; k < graph[i].size() ; ++k ){tmp.push_back(graph[i][k]);dfs(graph, graph[i][k], n);tmp.pop_back();}}vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {int n = graph.size();dfs(graph, 0, n);return ans;}
};

leetcode-算法基础-5、6、7、8相关推荐

  1. 【python】一道LeetCode搞懂递归算法!#131分割回文串 #以及刷LeetCode的一点点小心得 [数据结构与算法基础]

    题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 所有可能的分割方案. # 示例 输入: "aab" 输出: [["aa",&q ...

  2. 【算法基础】LeetCode股票交易类算法题目总结(一次交易,两次交易,无数次交易)...

    大家好,前一段时间的基金市场波动很大啊,也就又诞生了很多"韭菜",在这里千寻也提醒大家"股市有风险,入市需谨慎",玩基金一定用不着急用的钱哦~ 刷算法题目,应该 ...

  3. leetcode算法题--完全平方数★

    原题链接:https://leetcode-cn.com/problems/perfect-squares/ 相关题目:leetcode算法题–零钱兑换 1.回溯法 就是暴力法,套路就是递归,但是有很 ...

  4. LeetCode算法题6:滑动窗口*

    文章目录 前言 一.无重复字符的最长子串 思路 1: 思路 2: 二.字符串的排列 思路 1: 思路 2: 思路 3: 思路 3 plus: 思路 3 plus plus: 思路 4: 思路 5: 总 ...

  5. LeetCode算法题-Repeated String Match(Java实现)

    这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...

  6. JAVA代码—算法基础:数独问题(Sodoku Puzzles)

    JAVA代码-算法基础:数独问题(Sodoku Puzzles) 数独问题(Sodoku Puzzles) 数独游戏(日语:数独 すうどく)是一种源自18世纪末的瑞士的游戏,后在美国发展.并在日本得以 ...

  7. 《iOS面试之道》算法基础学习(上)

    前言 道长和唐巧的面试之道,刚出来第一时间就入手了,也是趁着公司目前不是很忙,能好好静下心来细读这本书.笔者认为这本书的最大亮点就在第二章的算法基础,所以想通过笔记的形式来记录算法的学习过程,同时在忘 ...

  8. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  9. 算法基础、算法比赛快速入门(java)

    想用Java快速入门算法?这篇文章你得看! 提示:本文章适合想要入门算法,并且想 "快速" 达到一定成果的同学们阅读~ 文章非常非常非常长(可能是你见过最长的算法基础篇章)!!! ...

  10. LeetCode算法刷题目录 (Java)

    目录 1.数学基础 1.1.位运算 1.2.其它 2.数据结构 2.1.线性表 2.1.1.数组(双指针) 2.1.2.链表(双指针) 2.1.3.栈 2.1.4.队列 2.1.5.字符串 2.1.6 ...

最新文章

  1. 关于GridView手动绑定的一段代码,一切尽在不言中
  2. 数据挖掘:一个end2end完整实例
  3. Cloud一分钟 | 北京13部门召开座谈会,要求阿里京东等平台规范开展双11促销活动...
  4. 华为云全球首发企业级AI应用开发套件ModelArts Pro,加速行业AI落地
  5. 利用PCF8591进行AD转换
  6. C++统计博客园写过的代码行数
  7. 交返对于高频交易者尤为重要
  8. CnOpenData中国行政区划数据简介
  9. 中国石油大学奥鹏《大学英语三》第一次在线作业
  10. Intel显卡跑ROS与CUDA总结(MacBook Pro 11.6.3)
  11. react-native >0.69版本 链接@ant-design/icons-react-native
  12. RFID 卡片防复制
  13. 路由token验证和路由守卫~~狂徒李四
  14. PDF转图片再转长图、python、pil
  15. openpnp - Smoothieware project build
  16. MATLAB如何读取文件某一行的内容,如何读取文件的某一行
  17. 高数——换元法(2)
  18. oracle000936,奇怪的ORA-000936错误
  19. cocos2dx lua 3.14 适配 安卓 刘海屏 全面屏 异形屏
  20. AAAI 2022 | 量化交易相关论文(附论文链接)

热门文章

  1. 小学生计算机德育渗透总结,小学科学教师德育工作总结
  2. 0基础学RS(九)思科AAA认证的本地AAA认证
  3. 亿级短视频社交美拍架构实战
  4. 结巴分词关键词相似度_中文文本相似度计算工具集
  5. DeviceNet概要
  6. java中IO流的相关知识
  7. 记录一些常用工具类方法
  8. 企业信息安全危机新花招——以疫苗为诱饵
  9. 0X000000该内存不能为read的解决方法
  10. 时间序列分析-预测Apple股票价格