LeetCodeWeeklyContest-156

2024-01-01 06:58
文章标签 156 leetcodeweeklycontest

本文主要是介绍LeetCodeWeeklyContest-156,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目传送
写题解就像写博客一样真的有好处,尽管会多花点时间。

1 、独一无二的出现次数

描述

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。

思路

统计出现次数,然后排序。有相同的为false,否则为true。

实现

 bool uniqueOccurrences(vector<int>& arr) {int a[2001]={0};for(int i=0;i<arr.size();i++){a[arr[i]+1000]++;}sort(a,a+2001);for(int i=0;i<2000;i++){if(a[i]==a[i+1]&&a[i]!=0){return false;}}return true;}

时间复杂度:O(nlog2n)

2、尽可能使字符串相等

描述

给你两个长度相同的字符串,s 和 t。
将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。
用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。
如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。
如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。

思路

官方题解说这是本场比赛里面最好的题目了。
使用滑动窗口思想。
一般使用滑动窗口思想,求解一个序列中连续k个数的最值问题

下面以s=“pxezla”,t=“loewbi”,maxCost=25为例

index012345
string1pxezla
string2loewbi
|cost[i]|4903108
|sum[i]|41313162634

分别使用left,right表示cost数组的左右索引。
left=0,right=0
只要curCost小于maxCost,就right++
当出现maxCost<curCost时,则需要使left–,即向右整体滑动,貌似有点改进的kmp算法的感觉。
最大长度best = max(best,right-left+1);
只需滑动一次,即得最大值,对应的cost数组段为[9 0 3 10]

实现一

class Solution {
public:int equalSubstring(string s, string t, int maxCost) {vector<int> c;for(int i=0;i<s.size();i++){c.push_back(abs(s[i]-t[i]));}int curCost = 0,cnt=0;for(int i=0,j=0;i<s.size();i++){curCost += c[i];while(curCost>maxCost){curCost -= c[j];j++;}cnt = max(cnt,i-j+1);}return cnt;}
};

实现二

class Solution {
public:int equalSubstring(string s, string t, int maxCost) {vector<int> sumArr;int ans =0;sumArr.push_back(ans); // 很关键的处理for(int i=0;i<s.size();i++){ans += abs(s[i]-t[i]);// cout << ans << endl;sumArr.push_back(ans);}int curCost = 0,cnt=0;for(int i=1,j=0;i<=s.size();i++){  // 注意这里的等号,仔细想想为甚麽? for(;sumArr[i]-sumArr[j]>maxCost;j++);cnt = max(cnt,i-j);}return cnt;}
};

时间复杂度:O(n)

3、删除字符串中的所有相邻重复项 II

描述

给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。
在执行完所有删除操作后,返回最终得到的字符串。
本题答案保证唯一。

思路

参考官方题解,维护一个栈,栈元素类型为 pair<char,int> ,其中char类型为对应的字符串的s[i],int类型为对应的个数,由于本题保证答案唯一,题目大大简化,所以最后个数等于k的字符一定可以被删掉。
扫描字符串s,使字符依次进栈,若栈顶的字母对应的个数等于k,便出栈k次。

实现

class Solution {
public:string removeDuplicates(string s, int k) {stack<pair<char,int> > st;for(int i=0;i<s.size();i++){if(st.empty()) st.push(make_pair(s[i],1));else {if(st.top().first==s[i]){st.push(make_pair(s[i],st.top().second+1));}else st.push(make_pair(s[i],1));}if(st.top().second==k){for(int i=0;i<k;i++){st.pop();}}}string result;while(st.size()){result += st.top().first;st.pop();}reverse(result.begin(),result.end());return result; }};

时间复杂度:O(n)

4、穿过迷宫的最少移动次数

这篇关于LeetCodeWeeklyContest-156的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558462

相关文章

c++ 156函数

inline内联函数 #include<iostream>using namespace std;inline void printA(){int a = 10;cout << "a:" << a << endl;}void main(){//printA();//c++编译器会这样 把函数体机械地放到main函数里面{int a = 10;cout << "a:" << a << end

UVa 156 反语片

/* * 解题思路: * 经典的字母重排问题,忽略大小写的比较,如果输入没有该单词对应的其他重排单词,则原单词输出 */ #include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#define A 1000char s1[ A ][ A ],s2[ A ][ A ];char s3

JY-156/1静态电压继电器 板前接线 约瑟JOSEF

JY-150系列电压继电器适用于继电保护线路中,作为过电压保护或低电压闭锁的动作元件。 该产品采用集成电路原理构成,它克服了原来电磁型电压继电器触点易抖动,工作时噪音大,动作值、返回值难调整及运输后动作值易变等缺点,而且不需辅助电源,可代替DY-30,DY-50电磁型电压继电器。它的性能优于JY-30系列电压继电器,不需要有专门的直流回路来作为继电器的工作电源,方便了用户,抗力增强。

LeetCode 题解(156): Unique Binary Search Trees II

题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example, Given n = 3, your program should return all 5 unique BST's shown below. 1

【156】NFS服务搭建与配置及常用命令

内容目录(原文见公众号python宝) 一、NFS 工作原理简介(NFS是Net File System的简写,即网络文件系统)二、NFS 服务所需的安装包及常用命令三、NFS服务端搭建 一、NFS 工作原理简介  注意:一台机器不要同时做 NFS 的服务端和 NFS 的客户端。如果同时作了 NFS 的服务端和客户端,那么在关机的时候,会一直夯住,可能十分钟之后甚至更久才能关闭成功。

AI:156-利用Python进行自然语言处理(NLP):情感分析与文本分类

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.情感分析与文本分类 自然语言处理(Natural Language Processing,NLP)是人工智能领域中的一个重要分支,它致力于让计算机能够理解、解

二维哈希讲解-And-AcWing-156. 矩阵-题解

如果还不清楚什么是哈希算法,可以点击这里。 文章目录 二维哈希思想AcWing-156. 矩阵DescriptionInputOutputSample InputSample Output 题目大意解题思路AC代码 二维哈希思想 说一下我对二维哈希算法的理解 之前,我们已经可以把一维数组映射成一个数了。如下: 数组名元素哈希值A1,5,6,9,8,4,0,5,6,8

文献阅读(156)异构集成

文章目录 introduction1 introduction 题目:A 256Gb/s/mm-shoreline AIB-Compatible 16nm FinFET CMOS Chiplet for 2.5D Integration with Stratix 10 FPGA on EMIB and Tiling on Silicon Interposer时间:2021会议:CI

芒果YOLOv8改进组合156:动态标签分配ATSS + 损失函数NWDLoss组合改进,共同助力VisDrone小目标检测高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第二集】动态标签分配ATSS + 损失函数NWDLoss组合改进,共同助力VisDrone小目标检测高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 损失函数NWDLoss组合改进,源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可,教程包括源代码 💡论文地址:https://arxiv.org/abs/19

156 - ZOJ Monthly, January 2019 - A Little Sub and Pascal's Triangle找规律

Little Sub is about to take a math exam at school. As he is very confident, he believes there is no need for a review. Little Sub’s father, Mr.Potato, is nervous about Little Sub’s attitude, so he gi