当前位置: 首页 > news >正文

【力扣周赛】第357场周赛

【力扣周赛】第357场周赛

    • 2810. 故障键盘
      • 题目描述
      • 解题思路
    • 2811. 判断是否能拆分数组
      • 题目描述
      • 解题思路

2810. 故障键盘

题目描述

描述:你的笔记本键盘存在故障,每当你在上面输入字符 ‘i’ 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。

给你一个下标从 0 开始的字符串 s ,请你用故障键盘依次输入每个字符。

返回最终笔记本屏幕上输出的字符串。

示例 1:

输入:s = "string"
输出:"rtsng"
解释:
输入第 1 个字符后,屏幕上的文本是:"s" 。
输入第 2 个字符后,屏幕上的文本是:"st" 。
输入第 3 个字符后,屏幕上的文本是:"str" 。
因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "rts" 。
输入第 5 个字符后,屏幕上的文本是:"rtsn" 。
输入第 6 个字符后,屏幕上的文本是: "rtsng" 。
因此,返回 "rtsng" 。

示例 2:

输入:s = "poiinter"
输出:"ponter"
解释:
输入第 1 个字符后,屏幕上的文本是:"p" 。
输入第 2 个字符后,屏幕上的文本是:"po" 。
因为第 3 个字符是 'i' ,屏幕上的文本被反转,变成 "op" 。
因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "po" 。
输入第 5 个字符后,屏幕上的文本是:"pon" 。
输入第 6 个字符后,屏幕上的文本是:"pont" 。
输入第 7 个字符后,屏幕上的文本是:"ponte" 。
输入第 8 个字符后,屏幕上的文本是:"ponter" 。
因此,返回 "ponter" 。

提示:

1 <= s.length <= 100
s 由小写英文字母组成
s[0] != ‘i’

解题思路

思路:直接模拟。

class Solution {
public:string finalString(string s) {int n=s.size();for(int i=0;i<n;i++){if(s[i]=='i'){reverse(s.begin(),s.begin()+i);s.erase(i,1);i--;}}return s;}
};

总结:reverse(s.begin(),s.end()),其是左闭右开区间[begin,end);s.erase(index,len)表示删除下标从index开始长度为len的元素;此时删除后要将i减去一喔!

2811. 判断是否能拆分数组

题目描述

描述:给你一个长度为 n 的数组 nums 和一个整数 m 。请你判断能否执行一系列操作,将数组拆分成 n 个 非空 数组。

在每一步操作中,你可以选择一个 长度至少为 2 的现有数组(之前步骤的结果) 并将其拆分成 2 个子数组,而得到的 每个 子数组,至少 需要满足以下条件之一:

子数组的长度为 1 ,或者
子数组元素之和 大于或等于 m 。
如果你可以将给定数组拆分成 n 个满足要求的数组,返回 true ;否则,返回 false 。

注意:子数组是数组中的一个连续非空元素序列。

示例 1:

输入:nums = [2, 2, 1], m = 4
输出:true
解释:
第 1 步,将数组 nums 拆分成 [2, 2] 和 [1] 。
第 2 步,将数组 [2, 2] 拆分成 [2] 和 [2] 。
因此,答案为 true 。

示例 2:

输入:nums = [2, 1, 3], m = 5 
输出:false
解释:
存在两种不同的拆分方法:
第 1 种,将数组 nums 拆分成 [2, 1] 和 [3] 。
第 2 种,将数组 nums 拆分成 [2] 和 [1, 3] 。
然而,这两种方法都不满足题意。因此,答案为 false 。

示例 3:

输入:nums = [2, 3, 3, 2, 3], m = 6
输出:true
解释:
第 1 步,将数组 nums 拆分成 [2, 3, 3, 2] 和 [3] 。
第 2 步,将数组 [2, 3, 3, 2] 拆分成 [2, 3, 3] 和 [2] 。
第 3 步,将数组 [2, 3, 3] 拆分成 [2] 和 [3, 3] 。
第 4 步,将数组 [3, 3] 拆分成 [3] 和 [3] 。
因此,答案为 true 。 

提示:

1 <= n == nums.length <= 100
1 <= nums[i] <= 100
1 <= m <= 200

解题思路

思路:由于最后必定会拆分出一个长度为2的数组,故只需要判断数组中是否存在相邻的两个数之和大于等于m即可。

class Solution {
public:bool canSplitArray(vector<int>& nums, int m) {int n=nums.size();if(n<=2)return true;for(int i=1;i<n;i++){if(nums[i]+nums[i-1]>=m)return true;}return false;}
};

总结:假设1 1 1 1 2 2 1 1 1 1,m=4,那么存在2 2其和等于4,故可以像砍一刀一样左右各自依次划分长度为1的数组。

http://www.lryc.cn/news/116028.html

相关文章:

  • 多线程案例(4)-线程池
  • 【数据结构OJ题】轮转数组
  • 现代C++中的从头开始深度学习:【4/8】梯度下降
  • Yolov5缺陷检测/目标检测 Jetson nx部署Triton server
  • MobaXterm 中文乱码, 及pojie
  • java: 程序包sun.misc不存在
  • WSL2Linux 子系统(五)
  • java 企业工程管理系统软件源码 自主研发 工程行业适用 em
  • IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?
  • 【iOS】RunLoop
  • 数据包传输方式:单播、多播、广播、组播、泛播
  • WebRTC基础知识
  • 积累常见的有针对性的python面试题---python面试题001
  • 在springboot使用websocket时mapper无法注入
  • 前端加密与解密的几种方式
  • 详解Spring Bean的生命周期
  • 详解Shell 脚本中 “$” 符号的多种用法
  • Redis如何实现Session存储
  • 安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查
  • 【Springboot】@ComponentScan 详解
  • flask-----信号
  • 10_Vue3 其它的组合式API(Composition API)
  • COCOS项目运行的时候图片模糊的原因
  • Python中搭建IP代理池的妙招
  • 学习pytorch 2
  • elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数
  • 嵌入式面试5 -makefile shell
  • 获40余家主机厂青睐,这家OTA「吸金王」完成超亿元B2轮融资!
  • CGI, FastCGI, WSGI, uWSGI, uwsgi分别是什么?
  • Android T 窗口层级相关的类(更新中)