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

网站建设公司哪个好一点西安网站维护公司

网站建设公司哪个好一点,西安网站维护公司,腾讯体育,赤峰做网站公司Q1、找到字符串中合法的相邻数字 1、题目描述 给你一个只包含数字的字符串 s 。如果 s 中两个 相邻 的数字满足以下条件,我们称它们是 合法的 : 前面的数字 不等于 第二个数字。两个数字在 s 中出现的次数 恰好 分别等于这个数字本身。 请你从左到右…

Q1、找到字符串中合法的相邻数字

1、题目描述

给你一个只包含数字的字符串 s 。如果 s 中两个 相邻 的数字满足以下条件,我们称它们是 合法的

  • 前面的数字 不等于 第二个数字。
  • 两个数字在 s 中出现的次数 恰好 分别等于这个数字本身。

请你从左到右遍历字符串 s ,并返回最先找到的 合法 相邻数字。如果这样的相邻数字不存在,请你返回一个空字符串。

示例 1:

**输入:**s = “2523533”

输出:“23”

解释:

数字 '2' 出现 2 次,数字 '3' 出现 3 次。"23" 中每个数字在 s 中出现的次数都恰好分别等于数字本身。所以输出 "23"

示例 2:

**输入:**s = “221”

输出:“21”

解释:

数字 '2' 出现 2 次,数字 '1' 出现 1 次。所以输出 "21"

示例 3:

**输入:**s = “22”

输出:“”

解释:

没有合法的相邻数字。

2、解题思路
  1. 计数
    首先,我们需要计算字符串中每个数字出现的次数。因为 s 只包含数字字符 '0''9',我们可以利用一个长度为 10 的数组 hash 来记录每个数字出现的次数。

  2. 检查合法性
    然后,我们通过遍历字符串 s,对于每一对相邻的数字,检查是否满足以下条件:

    • 这两个数字不相等。

    • 这两个数字的出现次数分别等于它们本身的数字值。

  3. 返回结果
    如果找到符合条件的相邻数字,直接返回这两个数字;如果遍历完整个字符串都没有找到符合条件的数字对,返回空字符串。

3、代码实现
C++
class Solution {
public:string findValidPair(string s) {int n = s.size(); // 获取字符串的长度int hash[10] = {0}; // 初始化一个长度为 10 的数组, 用来存储每个数字出现的次数// 第一次遍历字符串, 计算每个数字的出现次数for (const auto& ch : s) {hash[ch - '0']++; // 将字符转为对应的数字, 并在数组中对应位置计数}// 第二次遍历字符串, 检查相邻数字是否符合条件for (int i = 0; i < n - 1; ++i) {// 判断当前数字与下一个数字是否符合条件if (hash[s[i] - '0'] == s[i] - '0' && s[i] != s[i + 1] && hash[s[i + 1] - '0'] == s[i + 1] - '0') {// 返回符合条件的相邻数字return s.substr(i, 2);}}// 如果没有找到符合条件的相邻数字, 返回空字符串return {};}
};
Python
class Solution:def findValidPair(self, s: str) -> str:n = len(s)              # 获取字符串的长度hash = [0] * 10         # 初始化一个长度为 10 的数组, 用来存储每个数字出现的次数# 第一次遍历字符串, 计算每个数字的出现次数for ch in s:hash[int(ch)] += 1  # 将字符转为对应的数字, 并且对数字出现频率计数# 第二次遍历字符串, 检查相邻数字是否符合条件for i in range(n - 1):# 判断当前数字与下一个数字是否符合条件if (hash[int(s[i])] == int(s[i])    # 当前数字的出现次数等于其本身and s[i] != s[i+1]              # 两个数字不相等and hash[int(s[i + 1])] == int(s[i + 1])    # 下一个数字的出现次数等于其本身):# 返回符合条件的相邻数字return s[i : i + 2]# 如果没有找到符合条件的相邻数字, 返回空字符串return ""
4、复杂度分析
  • 时间复杂度

    • 第一遍遍历字符串 s 来统计每个数字的出现次数的时间复杂度是 O(n),其中 n 是字符串的长度。

    • 第二遍遍历字符串 s 来检查相邻的数字对的合法性,时间复杂度也是 O(n)

​ 因此,总的时间复杂度是 O(n)

  • 空间复杂度
    • 我们使用了一个长度为 10 的数组 hash 来存储每个数字的出现次数。由于该数组大小是固定的,所以空间复杂度为 O(1)

Q2、重新安排会议得到最多空余时间 Ⅰ

1、题目描述

给你一个整数 eventTime 表示一个活动的总时长,这个活动开始于 t = 0 ,结束于 t = eventTime

同时给你两个长度为 n 的整数数组 startTimeendTime 。它们表示这次活动中 n 个时间 没有重叠 的会议,其中第 i 个会议的时间为 [startTime[i], endTime[i]]

你可以重新安排 至多 k 个会议,安排的规则是将会议时间平移,且保持原来的 会议时长 ,你的目的是移动会议后 最大化 相邻两个会议之间的 最长 连续空余时间。

移动前后所有会议之间的 相对 顺序需要保持不变,而且会议时间也需要保持互不重叠。

请你返回重新安排会议以后,可以得到的 最大 空余时间。

注意,会议 不能 安排到整个活动的时间以外。

示例 1:

**输入:**eventTime = 5, k = 1, startTime = [1,3], endTime = [2,5]

**输出:**2

解释:

img

[1, 2] 的会议安排到 [2, 3] ,得到空余时间 [0, 2]

示例 2:

**输入:**eventTime = 10, k = 1, startTime = [0,2,9], endTime = [1,4,10]

**输出:**6

解释:

img

[2, 4] 的会议安排到 [1, 3] ,得到空余时间 [3, 9]

示例 3:

**输入:**eventTime = 5, k = 2, startTime = [0,1,2,3,4], endTime = [1,2,3,4,5]

**输出:**0

解释:

活动中的所有时间都被会议安排满了。

2、解题思路

这是一个滑动窗口问题。我们可以通过以下步骤来解决:

  1. 计算空余时间
    • 定义 get(i) 函数,计算第 i 个会议之前的空余时间。
    • 如果 i == 0,空余时间为 startTime[0]
    • 如果 i == n,空余时间为 eventTime - endTime[n - 1]
    • 否则,空余时间为 startTime[i] - endTime[i - 1]
  2. 滑动窗口
    • 使用滑动窗口维护一个大小为 k + 1 的窗口,计算窗口内的空余时间和。
    • 当窗口大小超过 k + 1 时,移除窗口最左边的空余时间。
  3. 返回结果
    • 返回滑动窗口中的最大空余时间和。
3、代码实现
C++
class Solution {
public:int maxFreeTime(int eventTime, int k, vector<int>& startTime, vector<int>& endTime) {int n = startTime.size();// 计算第 i 个会议之前的空余时间auto get = [&](int i) -> int {if (i == 0) {return startTime[0];}if (i == n) {return eventTime - endTime[n - 1];}return startTime[i] - endTime[i - 1];};// sum 表示当前窗口的空余时间和, ret 表示最大空余时间和int sum = 0, ret = 0;for (int i = 0; i <= n; ++i) {sum += get(i); // 将当前空余时间加入窗口if (i < k) {continue; // 窗口大小不足 k+1, 继续扩展}ret = max(ret, sum); // 更新最大空余时间和sum -= get(i - k);   // 移除窗口最左边的空余时间}return ret; // 返回结果}
};
Python
class Solution:def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:n = len(startTime)# 计算第 i 个会议之前的空余空间def get(i: int) -> int:if  i == 0:return startTime[0]if i == n:return eventTime - endTime[n - 1]return startTime[i] - endTime[i - 1]# sum 表示当前窗口的空余时间和, ret 表示最大空余时间和sum, ret = 0, 0for i in range(n + 1):sum += get(i)       # 将当前空余时间加入窗口if i < k:continue        # 窗口大小不足 k+1, 继续扩展ret = max(ret, sum) # 更新最大空余时间和sum -= get(i - k)   # 移除窗口最左边的空余时间return ret
4、复杂度分析
  • 时间复杂度
    • 遍历空余时间数组:O(n)
    • 每个空余时间的计算:O(1)
    • 总时间复杂度:O(n)
  • 空间复杂度
    • 只使用了常数级别的额外空间。
    • 总空间复杂度:O(1)
http://www.dtcms.com/wzjs/361517.html

相关文章:

  • 母婴网站怎么做百度在线客服中心
  • 网站建设的商业阶段网络营销学院
  • 飞言情做最好的小说网站百度竞价排名机制
  • 大学生asp网站开发的实训周360推广联盟
  • 杭州制造业企业做网站c++培训班学费一般多少
  • 创意产品设计及介绍关键词优化排名
  • iis7.5部署网站北京培训seo哪个好
  • 网站备案要网管做还是做网站的做电商平台排名
  • 做网站需要资质樱桃电视剧西瓜视频在线观看
  • php动态网站开发与设计网站设计与制作
  • 网站分为几级页面站长工具关键词挖掘
  • 如何学习网站建设app百度手机下载安装
  • 宁波市鄞州区建设局网站百度搜索热词排行榜
  • 做网站技术员seo搜索引擎优化视频
  • 怎么做网站的浏览栏一键优化清理
  • 美橙互联网站打不开怎么在百度推广
  • 在eclipse中做网站开发军事新闻头条最新消息
  • python 网站开发 sae百度网站电话是多少
  • 网站开发的挑战海会网络做的网站怎么做优化
  • wordpress禁止国外用户注册长治seo顾问
  • wordpress文字宁波seo优化外包公司
  • 太原网站建设好用的视频播放器app
  • seo经验是什么沈阳seo团队
  • 金融产品做网站推广seo网站建设优化什么意思
  • 做网站怎么建站点学管理培训班去哪里学
  • 网站建设与网页设计课免费顶级域名申请网站
  • 企业网站的建设 任务书百度推广排名代发
  • 一千个长尾关键词用一千个网站做全媒体广告投放平台
  • 怎么做网站上的模拟动画百度seo推广是什么
  • 金华市建设银行网站网络营销就是seo正确吗