【Leetcode Sheet】Weekly Practice 17

Leetcode Test

2216 美化数组的最少删除数(11.21)

给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组

  • nums.length 为偶数
  • 对所有满足 i % 2 == 0 的下标 inums[i] != nums[i + 1] 均成立

注意,空数组同样认为是美丽数组。

你可以从 nums 中删除任意数量的元素。当你删除一个元素时,被删除元素右侧的所有元素将会向左移动一个单位以填补空缺,而左侧的元素将会保持 不变

返回使 nums 变为美丽数组所需删除的 最少 元素数目*。*

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 105

【贪心】

int minDeletion(int* nums, int numsSize) {//美丽数组要求//1:偶数下标i,nums[i]!=nums[i+1]//2:len(new-nums)是偶数int n=numsSize,left=0,right=1,cnt=0;//left记录偶数下标,right探索下一个数,cnt记录删除的个数while(right<n){if(nums[right]!=nums[left]){//符合等式条件left=right+1;right=left+1;}else{//不符合等式条件right++;cnt++;}}if(left<n){//如果最后剩余奇数个数字,则需要删除一个cnt++;}return cnt;
}

【cpp极简版本】宫水三叶

2216. 美化数组的最少删除数 - 力扣(LeetCode)

class Solution {
public:int minDeletion(vector<int>& nums) {int n = nums.size(), cnt = 0;for (int i = 0; i < n; i++) {if ((i - cnt) % 2 == 0 && i + 1 < n && nums[i] == nums[i + 1]) {//如果当前下标是偶数,且下一个下标存在数组中,且当前num等于下一个num//则不符合条件,cnt自增cnt++;}}return (n - cnt) % 2 != 0 ? cnt + 1 : cnt;}
};
/*
1:每次删除元素,剩余元素都会往前移动,因此当前下标为i-cnt
2:处理 nums 过程中,若当前下标为偶数,且与下一位置元素相同,那么当前元素需被删除,令 cnt 自增
3:最终数组长度为 n−cnt,若长度为奇数,需要再额外删除结尾元素(cnt 再加一)
*/

2304 网格中的最小路径代价(11.22)

给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0m * n - 1 的不同整数组成。你可以在此矩阵中,从一个单元格移动到 下一行 的任何其他单元格。如果你位于单元格 (x, y) ,且满足 x < m - 1 ,你可以移动到 (x + 1, 0), (x + 1, 1), …, (x + 1, n - 1) 中的任何一个单元格。注意: 在最后一行中的单元格不能触发移动。

每次可能的移动都需要付出对应的代价,代价用一个下标从 0 开始的二维数组 moveCost 表示,该数组大小为 (m * n) x n ,其中 moveCost[i][j] 是从值为 i 的单元格移动到下一行第 j 列单元格的代价。从 grid 最后一行的单元格移动的代价可以忽略。

grid 一条路径的代价是:所有路径经过的单元格的 值之和 加上 所有移动的 代价之和 。从 第一行 任意单元格出发,返回到达 最后一行 任意单元格的最小路径代价。

提示:

  • m == grid.length
  • n == grid[i].length
  • 2 <= m, n <= 50
  • grid 由从 0m * n - 1 的不同整数组成
  • moveCost.length == m * n
  • moveCost[i].length == n
  • 1 <= moveCost[i][j] <= 100

【记忆化搜索】dfs
d f s ( i , j ) = { g r i d [ i ] [ j ] i = 0 m i n k = 0 n − 1 ( d f s ( i − 1 , k ) + m o v e C o s t [ g r i d [ i − 1 ] [ k ] ] [ j ] + g r i d [ i ] [ j ] ) i > 0 dfs(i,j)=\begin{cases} grid[i][j]&i=0\\ min_{k=0}^{n-1}(dfs(i-1,k)+moveCost[grid[i-1][k]][j]+grid[i][j])&i>0 \end{cases} dfs(i,j)={grid[i][j]mink=0n1(dfs(i1,k)+moveCost[grid[i1][k]][j]+grid[i][j])i=0i>0
到达第 0 行的单元格,则代价是到达单元格的数值

到达第 i 行的单元格 (i, j) ,则代价是到达单元格 (i-1, k)的代价 + (i-1, k)到(i, j)的路径代价 + (i, j)的数值

int **memo=NULL;//dfs(i,j)是从第0行的任意单元格出发,到达(i,j)单元格的最小路径代价
int dfs(int i,int j,int **grid,int **moveCost,int n){if(i==0) return grid[i][j];if(memo[i][j]>=0) return memo[i][j];//记忆了dfsint ret=INT_MAX;for(int k=0;k<n;k++){ret=fmin(ret,dfs(i-1,k,grid,moveCost,n)+moveCost[grid[i-1][k]][j]+grid[i][j]);}memo[i][j]=ret;return ret;
}int minPathCost(int** grid, int gridSize, int* gridColSize, int** moveCost, int moveCostSize, int* moveCostColSize) {int m=gridSize,n=gridColSize[0];memo=(int**)malloc(sizeof(int*)*m);for(int i=0;i<m;i++){memo[i]=(int*)malloc(sizeof(int)*n);for(int j=0;j<n;j++){memo[i][j]=-1;}}int ret=INT_MAX;for(int j=0;j<n;j++){ret=fmin(ret,dfs(m-1,j,grid,moveCost,n));}for(int i=0;i<m;i++){free(memo[i]);}free(memo);return ret;
}

1410 HTML实体解析器(11.23)

「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。

HTML 里这些特殊字符和它们对应的字符实体包括:

  • **双引号:**字符实体为 &quot; ,对应的字符是 "
  • **单引号:**字符实体为 &apos; ,对应的字符是 '
  • **与符号:**字符实体为 &amp; ,对应对的字符是 &
  • **大于号:**字符实体为 &gt; ,对应的字符是 >
  • **小于号:**字符实体为 &lt; ,对应的字符是 <
  • **斜线号:**字符实体为 &frasl; ,对应的字符是 /

给你输入字符串 text ,请你实现一个 HTML 实体解析器,返回解析器解析后的结果。

提示:

  • 1 <= text.length <= 10^5
  • 字符串可能包含 256 个ASCII 字符中的任意字符。

【模拟】遍历1次并替换substring,使用strncmp函数进行子串的比较

char* entityParser(char* text) {char* ans = (char*)calloc(1, sizeof(char) * (strlen(text) + 1));char* p = ans;while (*text) if      (*text != '&'                ) *(p ++) =     *(text ++) ;else if (!strncmp(text, "&quot;" , 6)) *(p ++) = '\"', text += 6;else if (!strncmp(text, "&apos;" , 6)) *(p ++) = '\'', text += 6;else if (!strncmp(text, "&amp;"  , 5)) *(p ++) = '&' , text += 5;else if (!strncmp(text, "&gt;"   , 4)) *(p ++) = '>' , text += 4;else if (!strncmp(text, "&lt;"   , 4)) *(p ++) = '<' , text += 4;else if (!strncmp(text, "&frasl;", 7)) *(p ++) = '/' , text += 7;else                                   *(p ++) =     *(text ++) ;return ans;
}

2824 统计和小于目标的下标对数目(11.24)

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < nnums[i] + nums[j] < target 的下标对 (i, j) 的数目。

提示:

  • 1 <= nums.length == n <= 50
  • -50 <= nums[i], target <= 50

【双指针】

int cmp(void *a,void *b){return *(int*)a-*(int*)b;
}int countPairs(int* nums, int numsSize, int target){int n=numsSize,cnt=0;qsort(nums,n,sizeof(int),cmp);for(int i=0,j=n-1;i<j;i++){while(i<j && nums[i]+nums[j]>=target){j--;}cnt+=j-i;}return cnt;
}

1457 二叉树中的伪回文路径(11.25)

给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。

请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。

提示:

  • 给定二叉树的节点数目在范围 [1, 105]
  • 1 <= Node.val <= 9

【dfs + hash】

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
int maxVal=10;bool check(int *arr){int cnt=0;for(int i=0;i<maxVal;i++){if(arr[i]%2==1){cnt++;}}return cnt<=1;//如果有2个数字是奇数个,则肯定不可能是回文
}int dfs(struct TreeNode *root,int *arr){if(root==NULL){return 0;}arr[root->val]++;//当前数字进入hash表int ret=0;if(root->left==NULL && root->right==NULL){//叶子节点if(check(arr)){ret=1;}}else{//中间的节点ret=dfs(root->left,arr)+dfs(root->right,arr);//递归左右子树}arr[root->val]--;//返回前撤销更新(回溯)return ret;
}int pseudoPalindromicPaths (struct TreeNode* root) {int arr[maxVal];//hash table for valuefor(int i=0;i<maxVal;i++){arr[i]=0;}return dfs(root,arr);
}

828 统计子串中的唯一字符(11.26)

我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。

例如:s = "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,因为它们只出现一次,所以 countUniqueChars(s) = 5

本题将会给你一个字符串 s ,我们需要返回 countUniqueChars(t) 的总和,其中 ts 的子字符串。输入用例保证返回值为 32 位整数。

注意,某些子字符串可能是重复的,但你统计时也必须算上这些重复的子字符串(也就是说,你必须统计 s 的所有子字符串中的唯一字符)。

提示:

  • 1 <= s.length <= 105
  • s 只包含大写英文字符

【变化量】828. 统计子串中的唯一字符 - 力扣(LeetCode)

int uniqueLetterString(char* s) {int n=strlen(s),ans=0;char c;for(c='A';c<='Z';c++){int flag1=-1,flag0=-1;//flag0上一次出现的下标//flag1上上一次出现的下标for(int i=0;i<n;i++){if(s[i]==c){flag1=flag0;flag0=i;}ans+=flag0-flag1;}}return ans;
}

907 子数组的最小值之和(11.27)

给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。

由于答案可能很大,因此 返回答案模 10^9 + 7

提示:

  • 1 <= arr.length <= 3 * 104
  • 1 <= arr[i] <= 3 * 104

【单调栈 / 动态规划】907. 子数组的最小值之和 - 力扣(LeetCode)

int sumSubarrayMins(int* arr, int arrSize) {long long ans = 0;long long mod = 1e9 + 7;//取余int monoStack[arrSize], dp[arrSize];int top = 0;for (int i = 0; i < arrSize; i++) {while (top > 0 && arr[monoStack[top - 1]] > arr[i]) {top--;}int k = top == 0 ? (i + 1) : (i - monoStack[top - 1]);dp[i] = k * arr[i] + (top == 0 ? 0 : dp[i - k]);ans = (ans + dp[i]) % mod;monoStack[top++] = i;}return ans;
}
/*
从左向右遍历数组并维护一个单调递增的栈,如果栈顶的元素大于等于当前元素 arr[i] 则弹出栈,此时栈顶的元素即为左边第一个小于当前值的元素我们求出以当前值为最右且最小的子序列的长度 k ,根据上述递推公式求出 dp[i],最终的返回值即为∑dp[i]
*/

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

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

相关文章

VBA高级应用30例:Ribbon(功能区)的介绍

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

Nginx性能调优策略

Nginx是一个高性能的Web服务器和反向代理服务器&#xff0c;常用于处理高并发的请求。以下是一些常见的Nginx性能调优策略&#xff1a; 一、调整worker_processes和worker_connections 在Nginx配置文件中&#xff0c;可以通过worker_processes和worker_connections参数来调整w…

JAVA将PDF转图片

前言 当今时代&#xff0c;PDF 文件已经成为了常用的文档格式。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将 PDF 文件转换为图片格式&#xff0c;以便更方便地分享和使用。这时&#xff0c;我们可以使用 Java 编程语言来实现这个功能。Java 提供了许多库和工具&a…

Android 通过demo调试节点权限问题

Android 通过demo调试节点权限问题 近来收到客户反馈提到在应用层无法控制节点&#xff0c;于是写了一个简单的demo来验证节点的IO权限&#xff0c;具体调试步骤就是写一个按钮点击事件&#xff0c;当点击按钮时将需要验证的节点写为1&#xff08;节点默认为1则写为0&#xff…

城市安全守护者:分析无人机在交通领域的应用

随着科技的进步&#xff0c;无人机在交通领域的应用不断增加&#xff0c;为智慧交通管理提供了新便利。无人机凭借其灵活性&#xff0c;在违章取证、交通事故侦查、交通疏导等方面展现出巨大的应用潜力。无人机在交通领域的应用有哪些&#xff1f;跟着我们一探究竟。 1、违章取…

python循环

while循环 i1 while i<5:print(f第{i}个)if i3:break #结束循环i1i1 while i<5:if i3:continue #结束本次循环&#xff0c;进入下次i1print(f第{i}个)i1for循环 sum0 for i in range(2,101,2):sum i print(sum)# range(x,y,z) # x 表示开始值&#xff0c;默认0 # y 表…

系列二十四、Spring设计模式之策略模式

一、前言 对于我们Java开发人员来说&#xff0c;Spring框架的重要性不言而喻&#xff0c;可以说Java领域之所以发展这么壮大&#xff0c;生态这么丰富&#xff0c;功能这么强大&#xff0c;是离不开Spring以及由其衍生出来的各种子模块的&#xff0c;正是由它们共同奠定了JavaE…

ECShop 4.x collection_listSQL注入

漏洞描述 ECShop是一款B2C独立网店系统&#xff0c;适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序 影响版本&#xff1a;ecshop4.0.7及以下 漏洞环境及利用 docker环境搭建 访问8080端口&#xff0c;数据库主机为mysql&a…

如何确定先做哪件事情。

问题描述&#xff1a;工作或者生活中&#xff0c;有许多件事情&#xff0c;我们应该先做那件事情。 解决办法&#xff1a;重要紧急的四象限法则。具体如下所示&#xff1a; -----------------------------------------------------------------------------------------------…

基于OGG实现MySQL实时同步

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

海外ASO优化之如何优化应用程序预览

应用程序预览是演示应用的特性、功能的界面。通过简短视频吸引用户应用商店。由于应用程序预览自动播放&#xff0c;所以它们是帮助用户发现和了解我们应用的关键。 1、规划应用程序预览。 应用商店支持的多种语言&#xff0c;最多可以有三个应用预览&#xff0c;每个预览的时…

接口测试:Jmeter和Postman测试方法对比

前阶段做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xff0c;所以今天我们就来谈谈一大部分人…

Java中的类和对象

在Java编程语言中&#xff0c;类和对象是核心概念。理解类和对象的概念对于掌握Java编程至关重要。本文将详细介绍Java中类和对象的概念、定义和使用方法&#xff0c;并提供相关示例代码&#xff0c;帮助读者深入了解和应用这些基础知识。 一、类和对象的概念 在面向对象编程中…

【C/PTA —— 12.指针1(课内实践)】

C/PTA —— 12.指针1&#xff08;课内实践&#xff09; 6-1 交换两个整数的值6-2 利用指针找最大值6-3 字符串的连接6-4 移动字母 6-1 交换两个整数的值 void fun(int* a, int* b) {int* tmp *a;*a *b;*b tmp; }6-2 利用指针找最大值 void findmax(int* px, int* py, int* p…

超声波雪深监测站冬季雪景的智能守护者

随着冬季的到来&#xff0c;白雪皑皑的景象让人感到无比美丽。然而&#xff0c;雪景的美丽却给人们的生活和出行带来了一定的困扰。雪的深度和分布是影响道路交通、公共安全和旅游体验的关键因素。为了解决这一问题&#xff0c;WX-XS1 超声波雪深监测站在冬季应运而生&#xff…

DjiTello + YoloV5的无人机的抽烟检测

一、效果展示 注&#xff1a;此项目纯作者自己原创&#xff0c;创作不易&#xff0c;不经同意不给予搬运权限&#xff0c;转发前请联系我&#xff0c;源码较大需要者评论获取&#xff0c;谢谢配合&#xff01; 1、未启动飞行模型无人机的目标检测。 DjiTello YOLOV5抽烟检测 …

【自然语言处理】利用sklearn库函数绘制三维瑞士卷

一&#xff0c;原理介绍 sklearn.datasets.make_swiss_roll&#xff08;&#xff09;函数提供了三维瑞士卷的数据集&#xff0c;我们可以利用他来生成瑞士卷&#xff0c;该函数的用法见sklearn官方文档&#xff1a;官网文档&#xff1a;sklearn.datasets.make_swiss_roll&…

语音机器人的两种常见业务场景

第一个业务场景 之前写过一篇语音机器人是真人录音好&#xff0c;还是TTS转语音更好的文章。今天再来说一说TTS一个很细微的场景。 假设一句话 这里是*****银行委托机构&#xff0c;您在*****银行的信用卡长期逾期至今仍未依照约定履行还款义务&#xff0c;为避免逃废债给您…

JWT详解

本文从本人博客搬运&#xff0c;原文格式更加美观&#xff0c;可以移步原文阅读