【Leetcode Sheet】Weekly Practice 18

Leetcode Test

1670 设计前中后队列(11.28)

请你设计一个队列,支持在前,中,后三个位置的 pushpop 操作。

请你完成 FrontMiddleBack 类:

  • FrontMiddleBack() 初始化队列。
  • void pushFront(int val)val 添加到队列的 最前面
  • void pushMiddle(int val)val 添加到队列的 正中间
  • void pushBack(int val)val 添加到队里的 最后面
  • int popFront()最前面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1
  • int popMiddle()正中间 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1
  • int popBack()最后面 的元素从队列中删除并返回值,如果删除之前队列为空,那么返回 -1

请注意当有 两个 中间位置的时候,选择靠前面的位置进行操作。比方说:

  • 6 添加到 [1, 2, 3, 4, 5] 的中间位置,结果数组为 [1, 2, **6**, 3, 4, 5]
  • [1, 2, **3**, 4, 5, 6] 的中间位置弹出元素,返回 3 ,数组变为 [1, 2, 4, 5, 6]

提示:

  • 1 <= val <= 109
  • 最多调用 1000pushFrontpushMiddlepushBackpopFrontpopMiddlepopBack

【双端队列】1670. 设计前中后队列 - 力扣(LeetCode)

class FrontMiddleBackQueue {deque<int> left;deque<int> right;void balance(){if(left.size()>right.size()){//move the last of left to the head of rightright.push_front(left.back());left.pop_back();}else if(right.size()>left.size()+1){//move the head of right to the last of leftleft.push_back(right.front());right.pop_front();}}
public://初始化FrontMiddleBackQueue() {//}//val加到队列最前面void pushFront(int val) {left.push_front(val);balance();}//val加到队列正中间void pushMiddle(int val) {if(left.size()<right.size()){left.push_back(val);}else{right.push_front(val);}balance();}//val加到队列最后面void pushBack(int val) {right.push_back(val);balance();}//返回最前面的valueint popFront() {if(right.empty()){return -1;}int val;if(left.empty()){val=right.front();right.pop_front();}else{val=left.front();left.pop_front();}balance();return val;}//返回正中间的valueint popMiddle() {if(right.empty()){return -1;}int val;if(left.size()==right.size()){val=left.back();left.pop_back();}else{val=right.front();right.pop_front();}balance();return val;}//返回最后面的valueint popBack() {if(right.empty()){return -1;}int val=right.back();right.pop_back();balance();return val;}
};/*** Your FrontMiddleBackQueue object will be instantiated and called as such:* FrontMiddleBackQueue* obj = new FrontMiddleBackQueue();* obj->pushFront(val);* obj->pushMiddle(val);* obj->pushBack(val);* int param_4 = obj->popFront();* int param_5 = obj->popMiddle();* int param_6 = obj->popBack();*/

2336 无限集中的最小数字(11.29)

现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...]

实现 SmallestInfiniteSet 类:

  • SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
  • int popSmallest() 移除 并返回该无限集中的最小整数。
  • void addBack(int num) 如果正整数 num 存在于无限集中,则将一个 num 添加 到该无限集中。

提示:

  • 1 <= num <= 1000
  • 最多调用 popSmallestaddBack 方法 共计 1000

【有序集合】

class SmallestInfiniteSet {int thres=1;set<int> s;
public://初始化SmallestInfiniteSet() { }//移除 并返回该无限集中的最小整数。int popSmallest() {//如果比thres小的单独值不存在,则弹出thresif(s.empty()){int t=thres;thres++;return t;}//否则,记录set中的起始值,并弹出else{int t=*s.begin();s.erase(s.begin());return t;}}//如果正整数num不存在于infinite,则添加void addBack(int num) {if(num<thres){//如果num小于最小阈值,则添加num,否则表示num一定在阈值后面的集合中s.insert(num);}}
};/*** Your SmallestInfiniteSet object will be instantiated and called as such:* SmallestInfiniteSet* obj = new SmallestInfiniteSet();* int param_1 = obj->popSmallest();* obj->addBack(num);*/

1657 确定两个字符串是否接近(11.30)

如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近

  • 操作 1:交换任意两个现有字符。

    • 例如,a**b**cd**e** -> a**e**cd**b**
  • 操作 2:将一个现有字符的每次出现转换为另一个现有字符,并对另一个字符执行相同的操作。

    • 例如,**aa**c**abb** -> **bb**c**baa**(所有 a 转化为 b ,而所有的 b 转换为 a

你可以根据需要对任意一个字符串多次使用这两种操作。

给你两个字符串,word1word2 。如果 word1word2 接近 ,就返回 true ;否则,返回 false

提示:

  • 1 <= word1.length, word2.length <= 105
  • word1word2 仅包含小写英文字母

【hash】

int cmp(void *a,void *b){return *(int*)a-*(int*)b;
}bool closeStrings(char* word1, char* word2) {int n1=strlen(word1),n2=strlen(word2);if(n1!=n2) return 0;int *hash1=(int*)malloc(sizeof(int)*26);int *hash2=(int*)malloc(sizeof(int)*26);for(int i=0;i<26;i++){hash1[i]=0;}for(int i=0;i<26;i++){hash2[i]=0;}//hash countingfor(int i=0;i<n1;i++){hash1[word1[i]-'a']++;}for(int i=0;i<n2;i++){hash2[word2[i]-'a']++;}//existing words judgefor(int i=0;i<26;i++){if(hash1[i]!=0 && hash2[i]==0){return 0;}else if(hash1[i]==0 && hash2[i]!=0){return 0;}}//sort arrayqsort(hash1,26,sizeof(int),cmp);qsort(hash2,26,sizeof(int),cmp);//comparefor(int i=0;i<26;i++){if(hash1[i]!=hash2[i]){return 0;}}return 1;
}

2661 找出叠涂元素(12.1)

给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 matarrmat 都包含范围 [1,m * n] 内的 所有 整数。

从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i]mat 单元格涂色。

请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i

提示:

  • m == mat.length
  • n = mat[i].length
  • arr.length == m * n
  • 1 <= m, n <= 105
  • 1 <= m * n <= 105
  • 1 <= arr[i], mat[r][c] <= m * n
  • arr 中的所有整数 互不相同
  • mat 中的所有整数 互不相同

【hash counting】

int firstCompleteIndex(int* arr, int arrSize, int** mat, int matSize, int* matColSize){int len=arrSize,m=matSize,n=matColSize[0];int *row=(int*)malloc(sizeof(int)*(len+1));int *col=(int*)malloc(sizeof(int)*(len+1));//record the row and col of each figurefor(int i=0;i<len+1;i++){row[i]=-1;col[i]=-1;}int *checkrow=(int*)malloc(sizeof(int)*m);int *checkcol=(int*)malloc(sizeof(int)*n);for(int i=0;i<m;i++){checkrow[i]=n;}for(int i=0;i<n;i++){checkcol[i]=m;}//每行有n个数,每列有m个数//hash record the row&col of each figurefor(int i=0;i<m;i++){for(int j=0;j<n;j++){int fig=mat[i][j];row[fig]=i;col[fig]=j;}}int ret=-1;for(int i=0;i<len;i++){int temp=arr[i];//temp's position should add to hashint temprow=row[temp];int tempcol=col[temp];checkrow[temprow]--;checkcol[tempcol]--;if(checkrow[temprow]==0 || checkcol[tempcol]==0){ret=i;break;}}return ret;
}

1094 拼车(12.2)

车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向

给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromitoi 。这些位置是从汽车的初始位置向东的公里数。

当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false

提示:

  • 1 <= trips.length <= 1000
  • trips[i].length == 3
  • 1 <= numPassengersi <= 100
  • 0 <= fromi < toi <= 1000
  • 1 <= capacity <= 105

【hash计数】

bool carPooling(int** trips, int tripsSize, int* tripsColSize, int capacity) {//capacity个空座位//trips[i] 0:旅客数量 1:上车位置 2:下车位置int *check=(int*)malloc(sizeof(int)*1001);for(int i=0;i<1001;i++){check[i]=0;}bool flag=1;for(int i=0;i<tripsSize;i++){int start=trips[i][1];int end=trips[i][2];int num=trips[i][0];while(start<end){check[start]+=num;if(check[start]>capacity){flag=0;break;}start++;}if(flag==0){break;}}return flag;
}

【差分】1094. 拼车 - 力扣(LeetCode)

bool carPooling(int **trips, int tripsSize, int *tripsColSize, int capacity) {//找到最大的time,为开辟数组做准备int toMax = 0;for (int i = 0; i < tripsSize; i++) {if (toMax < trips[i][2]) {toMax = trips[i][2];}}//开辟数组,并初始化diff的值int *diff = malloc(sizeof(int) * (toMax + 1));memset(diff, 0, sizeof(int) * (toMax + 1));for (int i = 0; i < tripsSize; i++) {diff[trips[i][1]] += trips[i][0];diff[trips[i][2]] -= trips[i][0];}int count = 0;for (int i = 0; i < toMax; i++) {count += diff[i];if (count > capacity) {return false;}}free(diff);return true;
}

1423 可获得的最大点数(12.3)

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。

每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。

你的点数就是你拿到手中的所有卡牌的点数之和。

给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。

提示:

  • 1 <= cardPoints.length <= 10^5
  • 1 <= cardPoints[i] <= 10^4
  • 1 <= k <= cardPoints.length

【滑动窗口】滑动不需要的格子(总量 - 不需要的)

int maxScore(int* cardPoints, int cardPointsSize, int k) {int n=cardPointsSize,sum=0,window=n-k;//初始化,取最左侧的k个数字作为窗口的sumfor(int i=0;i<window;i++){sum+=cardPoints[i];}int temp=sum,minsum=sum;for(int i=window;i<n;i++){//增加一个右侧的值,减去一个左侧的值sum+=cardPoints[i]-cardPoints[i-window];minsum=fmin(minsum,sum);temp+=cardPoints[i];}return temp-minsum;
}

【滑动窗口】滑动需要的格子(直接计算需要的)

int maxScore(int* cardPoints, int cardPointsSize, int k) {//start or end, pick a card, total = kint n=cardPointsSize,maxsum=0;//初始化,滑左侧k个for(int i=0;i<k;i++){maxsum+=cardPoints[i];}//每次从右侧滑动最末尾的一个进来,然后从左侧弹出一个走int newsum=maxsum;for(int i=0;i<k;i++){newsum+=cardPoints[n-i-1];newsum-=cardPoints[k-i-1];maxsum=fmax(maxsum,newsum);}return maxsum;
}

1038 从二叉搜索树到更大和树(12.4)

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。

提醒一下, 二叉搜索树 满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

提示:

  • 树中的节点数在 [1, 100] 范围内。
  • 0 <= Node.val <= 100
  • 树中的所有值均 不重复

**注意:**该题目与 538: https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 相同

【反序中序遍历】

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
int sum;struct TreeNode* dfs(struct TreeNode* root){if(root){dfs(root->right);sum+=root->val;root->val=sum;dfs(root->left);}return root;
}struct TreeNode* bstToGst(struct TreeNode* root) {sum=0;dfs(root);return root;
}

【Morris遍历】

struct TreeNode* getSuccessor(struct TreeNode* node) {struct TreeNode* succ = node->right;while (succ->left != NULL && succ->left != node) {succ = succ->left;}return succ;
}struct TreeNode* bstToGst(struct TreeNode* root) {int sum = 0;struct TreeNode* node = root;while (node != NULL) {if (node->right == NULL) {sum += node->val;node->val = sum;node = node->left;} else {struct TreeNode* succ = getSuccessor(node);if (succ->left == NULL) {succ->left = node;node = node->right;} else {succ->left = NULL;sum += node->val;node->val = sum;node = node->left;}}}return root;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何压缩GIF图片?三个方法轻松解决!

GIF图片格式大&#xff0c;社交平台对其有限制&#xff0c;需用图片处理工具压缩。嗨格式压缩大师、PS、EZGIF三种工具可实现压缩。 GIF图片由于其图片格式&#xff0c;本身就会很大&#xff0c;但是微信QQ还有一些其他的社交平台对上传的表情包是有限制的&#xff0c;这个时候…

浅析预付费用户电能管理系统的设计与应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;该设计解决了IC卡预付费电能表存在的问题&#xff0c;同时继承了先购电后用电的管理模式.电力部门的管理微机通过RS485网络对电能表进行管理&#xff0c;以防止用户窃电&#xff1b;选用射频卡作为用户卡以…

利用 EC2 和 S3 免费搭建私人网盘

网盘是一种在线存储服务&#xff0c;提供文件存储&#xff0c;访问&#xff0c;备份&#xff0c;贡献等功能&#xff0c;是我们日常中不可或缺的一种服务。 &#x1f4bb;创建实例 控制台搜索EC2 点击启动EC2 选择AMI 选择可免费试用的 g代表采用了Graviton2芯片。 配置存储 配…

python代码块整行缩进与取消整行缩进快捷键

首先选中要操作的部分 Pycharm编辑器&#xff1a; 整体缩进&#xff1a; Tab 整体取消缩进&#xff1a; Tab Shift python自带编辑器&#xff1a; 整体缩进&#xff1a; Ctrl 【 整体取消缩进&#xff1a; Ctrl 】

struct queue_limits结构体参数学习

struct queue_limits结构体参数含义总结 参考&#xff1a; 1&#xff1a;https://developer.aliyun.com/article/784610 2&#xff1a;https://developer.aliyun.com/article/770780 内核版本&#xff1a;4.19.1 结构体定义如下: struct queue_limits {unsigned long bounc…

物联网水表和4G水表的区别有哪些?

随着科技的发展&#xff0c;水表也不再是传统的机械表&#xff0c;而是经过数字化和智能化改造的物联网水表和4G水表。这两种水表具有很多的不同点。那么&#xff0c;物联网水表和4G水表的区别有哪些&#xff1f; 首先&#xff0c;物联网水表和4G水表的通信方式不同。物联网水表…

Zabbix监控接收SNMPTrap消息与SNMPTT结合

一.SNMP 协议 1.协议介绍 snmp 协议是日常使用的较多的一种协议&#xff0c;绝大多数网络设备/存储等都支持 snmp 协议&#xff0c;通过此协议可以实现设备状态的监控及管理。 2.主要组成 SNMP 协议包括以下三个部分: SNMP Agent&#xff1a;负责处理 snmp 请求&#xff0c…

LeetCode-二叉树OJ题

1.单值二叉树 965. 单值二叉树https://leetcode.cn/problems/univalued-binary-tree/ 先判断这棵树是否为空&#xff0c;如果是空树则是true。再判断左子树是否为空&#xff0c;并且左子树的值val和当前节点的val不相同&#xff0c;如果这左子树不为空且val不等于root的val则…

二百一十二、Flume——Flume实时采集Linux中的目录文件写入到HDFS中(亲测、附截图)

一、目的 在实现Flume实时采集Linux中的Hive日志写入到HDFS后&#xff0c;再做一个测试&#xff0c;用Flume实时采集Linux中的目录文件&#xff0c;即使用 Flume 监听Linux整个目录的文件&#xff0c;并上传至 HDFS中 二、前期准备 &#xff08;一&#xff09;安装好Hadoop、…

【Python函数】闭包函数

定义&#xff1a; 函数内部定义另外一个函数并且该内部函数可访问和修改外部变量的值 原理&#xff1a; 外部函数执行完后&#xff0c;有变量被内部函数使用则会将该变量绑定到内部变量后&#xff0c;再释放内存 语法 def outer_function():def inner_function():return 语句r…

一张网页截图,AI帮你写前端代码,前端窃喜,终于不用干体力活了

简介 众所周知&#xff0c;作为一个前端开发来说&#xff0c;尤其是比较偏营销和页面频繁改版的项目&#xff0c;大部分的时间都在”套模板“&#xff0c;根本没有精力学习前端技术&#xff0c;那么这个项目可谓是让前端的小伙伴们看到了一丝丝的曙光。将屏幕截图转换为代码&a…

02_W5500网络初始化

目录 1.如何与W5500通信&#xff1f; 2.SPI数据帧&#xff1a; 3.W5500寄存器&#xff1a; 通用寄存器&#xff1a; Socket 寄存器区: 4.代码分析&#xff1a; 5.测试&#xff1a; 1.如何与W5500通信&#xff1f; 我们在W5500介绍中可以看到W5500支持SPI通信协议&#x…

RoPE旋转位置编码浅析

RoPE旋转位置编码浅析 本文介绍了旋转位置编码RoPE在大模型中的广泛应用,包括Llama、Mistral 7B、Baichuan、ChatGLM、Qwen、…等。由于计算资源限制,大模型通常在较小的上下文长度中进行训练,导致在推理超出预训练长度时性能显著下降。为了解决这个问题,涌现了许多基于Ro…

MySQL数据库基础篇

文章目录 前言1.MySQL数据库概述2.SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作 2.4 图形化界面工具2.5 DML2.5.1 添加数据2.5.2 修改数据2.5.3 删除数据 2.6 DQL2.6.1 基本语法2.6.2 基础查询2.6.3 条件查询2.6.4 聚合函数2.6.5 分组查询2.6.6 排序查询…

怎样创建自己的百度百科词条?

对于企业、名人、品牌等&#xff0c;拥有一条详实的百度百科词条更是形象塑造和品牌推广的有效途径。怎样创建自己的百度百科词条&#xff1f;创建百度百科词条并非难事&#xff0c;关键在于态度和执行力。接下来伯乐网络传媒就来给大家分享一下&#xff01; 一、创建百度百科词…

Zabbix自定义监控内容

自定义监控客户端服务器登录的人数 需求&#xff1a;限制登录人数不超过 3 个&#xff0c;超过 3 个就发出报警信息 1.在客户端创建自定义key //明确需要执行的 linux 命令 who | wc -l//创建 zabbix 的监控项配置文件&#xff0c;用于自定义 key vim /etc/zabbix/zabbix_ag…

vue2-省市县三级联动选择框

Json数据&#xff1a;https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/area.json 如何访问本地文件参考&#xff1a;vue-访问本地json文件_vue3读取json文件-CSDN博客 .vue文件&#xff1a; <template><select v-model"mailAddress1" style…

为什么游戏公司不太愿意采用“微服务”架构?

为什么游戏公司可能不太愿意采用微服务架构&#xff1a; 实时性和性能需求&#xff1a; 游戏服务器对实时性能的要求非常高&#xff0c;微服务的网络开销和复杂性可能会影响游戏的实时性&#xff0c;尤其是在需要高速多向通讯的场景。 通信模式的复杂性&#xff1a; 游戏服务器…

【云备份】客户端实现 及 项目整体总结

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝Util.hpp的设计data.hpp的设计Storage —— 持久化存储Initload——数据初始化加载 cloud.hpp的设计GetFileIdentifier——创建文件唯一标识Upload—— 文件上传IsNeedupload —— 客户端文件是否需要上传判断RunMod…

chineseocr项目不使用web推理-docker容器化

整个流程介绍 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架&#xff0c;镜像4G出头。拉取 chineseocr 项目代码。修改代码&#xff0c;不使用web&#xff0c;增加命令行传入图片路径的功能打包成docker镜像。 开始 拉取 ufoym/deepo 镜像 &#xff1a;cpu版本为例 do…