LeetCode 1345、1371
1345 有效快递序列数目
题目:
给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。
每一步,你可以从下标 i 跳到下标 i + 1 、i - 1 或者 j :
- i + 1 需满足:i + 1 < arr.length
- i - 1 需满足:i - 1 >= 0
- j 需满足:arr[i] == arr[j] 且 i != j
请你返回到达数组最后一个元素的下标处所需的 最少操作次数 。
注意: 任何时候你都不能跳到数组外面。
示例 :
输入:arr = [100,-23,-23,404,100,23,23,23,3,404]
输出:3
解释:那你需要跳跃 3 次,下标依次为 0 --> 4 --> 3 --> 9 。下标 9 为数组的最后一个元素的下标。
思路
代码:
class Solution {public:int minJumps(vector<int>& w) {unordered_map<int, vector<int>> hash; //存储每个数值的下标编号int n = w.size(), INF = 1e9;for (int i = 0; i < n; i ++)hash[w[i]].push_back(i); //vector<int> dist(n, INF); //每个点初始距离queue<int> q;dist[0] = 0;q.push(0);while (q.size()) {auto t = q.front();q.pop();for (int i = t - 1; i <= t + 1; i += 2) {if (i >= 0 && i < n && dist[i] > dist[t] + 1) {dist[i] = dist[t] + 1;q.push(i);}}//扩展同值得节点int val = w[t];if (hash.count(val)) {for (int i : hash[val]) { //扩展该权值所有出现的位置if (dist[i] > dist[t] + 1) { //dist[i]可更新dist[i] = dist[t] + 1;q.push(i);}}hash.erase(val);}}return dist[n - 1]; //}
};
1371 每个元音包含偶数次的最长子字符串
题目:
给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。
示例 :
输入:s = "eleetminicoworoep"
输出:13
解释:最长子字符串是 "leetminicowor" ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。
思路
代码:
class Solution {public:int findTheLongestSubstring(string s) {vector<int> cnt(32, -2); //2^5=32个状态,每个最靠前的下标string str = "aeiou";cnt[0] = -1;int res = 0, state = 0;for (int i = 0; i < s.size(); i ++) {int k = str.find(s[i]); //找一下s[i]的下标if (k != -1) state ^= 1 << k; //当前字母出现过进行异或操作if (cnt[state] != -2) res = max(res, i - cnt[state]); //当前状态之前出现过else cnt[state] = i; //当前状态之前没出现过}return res;}
};
充电站
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
LeetCode 1345、1371相关推荐
- Leetcode 208、实现Trie(前缀树)
Leetcode 208.实现Trie(前缀树) 使用数组实现前缀树 insert() 向前缀树里面插入字符串 遍历当前要插入的字符串,查看当前数组对应的位置是否为空 如果为空,temp[curr] ...
- 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
目录 二分法细节 1.leetcode 34 在排序数组中查找元素的第一个和最后一个位置 2.不完全有序下的二分查找(leetcode33. 搜索旋转排序数组) 3.含重复元素的不完全有序下的二分查找 ...
- 树(2)-----leetcode(层、深度、节点)
1.树的类实现: class TreeNode(object):def __init__(self, x):self.val = xself.left = Noneself.right = None ...
- LeetCode 387、字符串中的第一个唯一字符
387.字符串中的第一个唯一字符 1)题目描述 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 .如果不存在,则返回 -1 . 示例 1: 输入: s = "leetco ...
- leetcode 10、Regular Expression Matching
本题大意: 给你一个字符串s, 以一个模式串p,而模式串中规则匹配的只有 '.' 和 '*',其中 '.' 代表匹配任意一个字符,'*' 代表匹配的前一个字符有0个或多个,求字符串s和模式串p是否匹配 ...
- leetcode 1345. Jump Game IV | 1345. 跳跃游戏 IV(BFS)
题目 https://leetcode.com/problems/jump-game-iv/ 题解 好久没做 hard 了,今天时间多,挑战一下.用 lqy 同学的话说,这题叫做 "苦难题& ...
- LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...
- LeetCode:409、最长回文串
409.最长回文串 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 先记录每个字符出现的次数: 然后除2在乘2:奇数次则会取最大偶数次:偶数次则不变: 然后判断是否存在奇数次的字符:若存在且 ...
- LeetCode 2248、多个数组求交集
2248.多个数组求交集 1)题目描述 给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 ...
最新文章
- jane street information session on pythonandocaml
- python中时间操作总结
- ubuntu终端切换快捷键
- 关于LayoutParams
- Activiti 接收任务活动
- 快速找到thtmlbUtil的定义位置
- VS中lib和dll
- flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo
- 关于建立 Carbon Forum 后 设置访问链接的问题
- 全面使用禅道做敏捷开发的规范化管理分享
- DIV的摇晃效果---jquery实现
- solaris 10 bash配置
- ISO20000/ISO27001认证区别和证书展示
- 本地 Git 文件夹显示绿色标识
- 关于soundfile写音频是报错raise RuntimeError(prefix + _ffi.string(err_str).decode(‘utf-8‘, ‘replace‘))
- 微信技术总监:一亿用户背后的架构秘密
- crontab 每天凌晨12点定时器_Linux下使用crontab实现mysql数据库自动备份
- 暗黑破坏神(DIABLOII 1.11B)BOT下载
- centos 7 查看oracle,Centos7下oracle配置(详细)
- websocket重连机制