leetcode 第 216 场周赛 整理

目录

  • 1662. 检查两个字符串数组是否相等
    • 题目
    • 自己代码
  • 5606. 具有给定数值的最小字符串
    • 题目
    • 自己代码
    • 贪心算法
  • 1664. 生成平衡数组的方案数
    • 题目
    • 自己代码
    • 动态规划优化
  • 1665. 完成所有任务的最少初始能量
    • 题目
    • 思路

1662. 检查两个字符串数组是否相等

题目

给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。

数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
在这里插入图片描述

自己代码

累加,然后判断是否相等

class Solution {
public:bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {string str1="";string str2="";for(int i=0;i<word1.size();i++){str1+=word1[i];}for(int i=0;i<word2.size();i++){str2+=word2[i];}if(str1==str2) return true;else return false;}
};

5606. 具有给定数值的最小字符串

题目

小写字符 的 数值 是它在字母表中的位置(从 1 开始),因此 a 的数值为 1 ,b 的数值为 2 ,c 的数值为 3 ,以此类推。

字符串由若干小写字符组成,字符串的数值 为各字符的数值之和。例如,字符串 “abe” 的数值等于 1 + 2 + 5 = 8 。

给你两个整数 n 和 k 。返回 长度 等于 n 且 数值 等于 k 的 字典序最小 的字符串。
在这里插入图片描述
在这里插入图片描述

自己代码

记录一下自己超时的代码:
使用的回溯法,这一题使用回溯法并不好,字母越多,解空间树就会越大,并且没有使用高效的剪枝手段。
在这里插入图片描述

class Solution {
public:int sum;int num;string res;char zimu[27]={'a','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};bool backtracking(int n,int k){if(num > n || sum > k || (num<n && sum<k && 26*(n-num)<(k-sum))){return false;}//找到了n个数if(num == n && sum == k){return true;}for(int i=1;i<=26;i++){//处理结点;string new_res = res;res+=(zimu[i]);sum+=i;num+=1;//递归,探索下一层if(backtracking(n,k)==true) return true;		sum-=i;num-=1;//回溯,撤销处理结果res=new_res;}return false;}string getSmallestString(int n, int k) {res="";sum=0;num=0;backtracking(n,k);return res;}
};

贪心算法

构造出的字符串字典序最小,可以考虑贪心地从字符串的开头处开始构造,每次选择一个满足要求的最小字母。
假设我们当前构造到了某一个位置,包括此位置还剩下n’个位子没有放入字符,并且这些位子的数值之和为k’;
那么如果我们放入字母c,那么剩余n’-1个位置以及k’-c的数值和必须满足:
n’-1<=k’-c<=26(n’-1)
(位置数 <= 位置数上的数值和 <= 位置数能放的最多的数值和);
这样就能得到c的取值范围:
k’ - 26(n’-1) <= c <= k’ - (n’-1)
这样就能得到c的取值下限k’ - 26(n’-1);
如果下限小于等于0,我们取a(这是我们能取的当中最小的)
如果下限大于0,那么选择数值对应的字符。
总的来说,就是从第一位到最后一位都取当前能够取的最小值,这样就能保证构造出来的字符串字典序最小了。

class Solution {
public:string getSmallestString(int n, int k) {int post_unused=n;int sum_left=k;string result="";while(post_unused!=0){int c=1;if(sum_left - 26*(post_unused-1)<=0)    c=1;else    c=sum_left - 26*(post_unused-1);result+=c-1+'a';post_unused--;sum_left-=c;}return result;}
};

按照这个思路写一遍。
我他妈傻了,贪心也太牛了,学习了。
在这里插入图片描述

1664. 生成平衡数组的方案数

题目

给你一个整数数组 nums 。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。

比方说,如果 nums = [6,1,7,4,1] ,那么:

选择删除下标 1 ,剩下的数组为 nums = [6,7,4,1] 。
选择删除下标 2 ,剩下的数组为 nums = [6,1,4,1]。
选择删除下标 4 ,剩下的数组为 nums = [6,1,7,4] 。
如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组 。

请你返回删除操作后,剩下的数组 nums 是 平衡数组 的 方案数 。
在这里插入图片描述

自己代码

又是一个超时代码
在这里插入图片描述
先讲讲思路:
首先nums数组中的每个位置都定义四个相应数组:
分别用来记录i之前的偶数之和,i之前的奇数之和,i之后的偶数之和,i之后的奇数之和。
然后开始遍历这个数组,记录每个位子的四个数组数值。
去除索引为i的元素后,i之前元素的奇偶性不变,i之后元素的奇偶性改变,即i之后奇/偶数下标元素的和变成了偶/奇数下标。
然后暴力解:满足奇数下标元素的和与偶数下标元素的和相等

class Solution {
public:int waysToMakeFair(vector<int>& nums) {int fangannums=0;for(int i=0;i<nums.size();i++){vector<int> sum={0,0,0,0};for(int j=0;j<i;j+=2){sum[0]+=nums[j];}for(int j=1;j<i;j+=2){sum[1]+=nums[j];}if(i%2==0){for(int j=i+1;j<nums.size();j+=2){sum[2]+=nums[j];}for(int j=i+2;j<nums.size();j+=2){sum[3]+=nums[j];} }else{for(int j=i+1;j<nums.size();j+=2){sum[3]+=nums[j];}for(int j=i+2;j<nums.size();j+=2){sum[2]+=nums[j];} }if(sum[0]+sum[2] == sum[1]+sum[3]) fangannums+=1;}return fangannums;}
};

动态规划优化

之前超时很明显就是四个数组值重复计算:i之前的偶数之和,i之前的奇数之和,i之后的偶数之和,i之后的奇数之和。
现在直接看下标,这样不容易混淆,下标是偶数,数组名字中就有even,下标是奇数,名字中就有odd。
步骤如下:
在这里插入图片描述

在这里插入图片描述
需要特别注意的地方:
dp推导:
注意这里我们四个数组都不会将nums[i]包括进去的。
i为偶数的话,i-1是奇数,所以左偶和[i] = 左偶和[i-1],左奇和[i] = 左奇和[i-1]+nums[i-1];
i为奇数的话,i-1是偶数,所以左偶和[i] = 左偶和[i-1]+nums[i-1],左奇和[i] = 左奇和[i-1];
这样一来,就能对计算i之前的偶数和,奇数和省下时序。没必要每次都从i=0开始判断累加。
其次,i右边的偶数和,奇数和也没必要通过for运算开始计算,而是只需要从sum_odd和sum_even中视情况减去左偶右偶、nums[i]即可。
这样也是同时省下大把时序。

//如果i是偶数下标,i-1为奇数下标
if(i%2==0)  
{before_i_evensum[i]=before_i_evensum[i-1];before_i_oddsum[i]=before_i_oddsum[i-1]+nums[i-1];
}
else
{before_i_evensum[i]=before_i_evensum[i-1]+nums[i-1];before_i_oddsum[i]=before_i_oddsum[i-1];
}
class Solution {
public:int waysToMakeFair(vector<int>& nums) {int fangannums=0;int n = nums.size();//i左边偶数下标所指数之和vector<int> before_i_evensum(n,0);//i左边奇数下标所指数之和vector<int> before_i_oddsum(n,0);//i右边偶数下标所指数之和vector<int> after_i_evensum(n,0);//i右边偶数下标所指数之和vector<int> after_i_oddsum(n,0);//*******【1】计算数组的奇数下标和以及偶数下标和***//int sum_odd=0;int sum_even=0;for(int i=0;i<n;i++){if(i%2==0) sum_even+=nums[i];else sum_odd+=nums[i];}//****************************************//for(int i=0;i<n;i++){if(i==0){after_i_evensum[0]=sum_even - nums[i];after_i_oddsum[0] = sum_odd; }else{//*******【2】i之前的偶数下标和以及奇数下标和***////如果i是偶数下标,i-1为奇数下标if(i%2==0)  {before_i_evensum[i]=before_i_evensum[i-1];before_i_oddsum[i]=before_i_oddsum[i-1]+nums[i-1];after_i_evensum[i]=sum_even - before_i_evensum[i] - nums[i];after_i_oddsum[i] = sum_odd - before_i_oddsum[i];}//如果i是奇数下标,i-1为偶数下标else{before_i_evensum[i]=before_i_evensum[i-1]+nums[i-1];before_i_oddsum[i]=before_i_oddsum[i-1];after_i_evensum[i]=sum_even - before_i_evensum[i];after_i_oddsum[i] = sum_odd - before_i_oddsum[i] - nums[i];}}if(before_i_evensum[i]+after_i_oddsum[i] == before_i_oddsum[i]+after_i_evensum[i])fangannums++;    }return fangannums;}
};

在这里插入图片描述
这一题当时并没有做出来,是刚刚才想到的。

1665. 完成所有任务的最少初始能量

题目

给你一个任务数组 tasks ,其中 tasks[i] = [actuali, minimumi] :

actuali 是完成第 i 个任务 需要耗费 的实际能量。
minimumi 是开始第 i 个任务前需要达到的最低能量。
比方说,如果任务为 [10, 12] 且你当前的能量为 11 ,那么你不能开始这个任务。如果你当前的能量为 13 ,你可以完成这个任务,且完成它后剩余能量为 3 。

你可以按照 任意顺序 完成任务。

请你返回完成所有任务的 最少 初始能量。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

观察示例,可以发现,完成的任务是按照最(低能量-实际能量)的大小来排序的,差越大的越先被执行。
https://leetcode-cn.com/problems/minimum-initial-energy-to-finish-tasks/solution/wan-cheng-suo-you-ren-wu-de-zui-shao-chu-shi-neng-/
神仙题目,这里贴个代码:

class Solution {
public:static bool cmp(vector<int>& p1, vector<int>& p2) {return p1[1] - p1[0] > p2[1] - p2[0];}int minimumEffort(vector<vector<int>>& tasks) {sort(tasks.begin(), tasks.end(),cmp);int sum=0;  //完成任务需要消耗的实际能量int ans=0;  //完成任务需要达到的最低能量//打印信息// for(auto& task : tasks)// {//     cout<<"task[0]:"<<task[0]<<" task[1]:"<<task[1]<<endl;// }for(auto& task : tasks){//cout<<"ans:"<<ans<<" sum:"<<sum<<endl;ans = max(ans,sum+task[1]);sum +=task[0];}return ans;}
};

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

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

相关文章

九、忘记密码功能的实现

一、页面设计 login页面&#xff0c;和第二篇博文(用户登录和注册)页面基本一样&#xff0c;只不过多了一个按钮 其中忘记密码&#xff1f;点我找回 为button3 retrieve_password页面 change_password页面 页面如下&#xff1a; 二、数据库 因为是忘记密码&#xff0c;…

Android中对手机文件进行读写

参考张泽华视频 &#xff08;一&#xff09;读写手机内存卡中的文件 对手机中的文件进行读写操作&#xff0c;或者新增一个文件时&#xff0c;可直接使用openFileOutput / openFileInput 得到文件的输出、输入流。 FileOutputStream fos this.openFileOutput("private.…

联轴器选型_联轴器| 软件工程

联轴器选型耦合 (Coupling) In general terms, the term coupling is defined as a thing that joins together two objects. If we talk about software development, then the term coupling is related to the connection between two modules, i.e. how tight interaction …

剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)

目录题目描述1、暴力递归法的重叠子问题2、备忘录解法3、dp数组迭代算法4、滚动数组优化5、参考链接题目描述 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F…

十、纺织品库存管理系统全部功能展示

一、系统主页面—Form1 系统运行加载页面&#xff0c;主要包含三个功能&#xff0c;①登录、②注册、③退出系统 程序运行图&#xff1a; 登录功能&#xff0c;跳转到登录页面 注册功能&#xff0c;跳转到注册页面 退出系统&#xff0c;程序结束运行 代码如下&#xff1a; …

leetcode 376. 摆动序列 思考分析

目录题目思路分析代码总结题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&am…

[EF在VS2010中应用Entity framework与MySQL

在VS2010中应用Entity framework与MySQL 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议本文讲述了在VS2010中使用EF与MySQL的一个简单示例。 工具安装&#xff1a; 1&#xff0c;MySQL MySQL Community Server Connector/NET 6…

十、美化界面

一、背景图片 二、透明化处理 BackColor—web—Transparent 三、数据库建表语句 数据库 USE [fiber_yy] GO /****** Object: Table [dbo].[yy_user_record] Script Date: 06/20/2022 18:54:48 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADD…

VS 如何修改C++编译标准

第一步&#xff0c;打开项目资源管理器的属性页面 第二步&#xff0c;选择配置属性->C/C>语言->C语言标准 第三步&#xff0c;选择合适的标准&#xff0c;一般来说选最新即可

十一、纺织面料下架功能的实现

一、数据库 数据库仍用yy_textile表&#xff0c;前几篇博文都叙述过这里就不再叙述 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面 admin_undercarriage 三、代码实现 admin_undercarriage using System; using System.IO; using System.Data; using S…

svg和canvas的应用场景分析【转载】

原文地址&#xff1a;http://blogs.msdn.com/b/weizhong/archive/2011/07/16/canvas-svg.aspx 思考什么时候使用Canvas 和SVG wzhong 15 Jul 2011 9:07 PM 0HTML5 Canvas 和 SVG 是 IE9 中引入的两项令人激动的图形功能。上周在拉斯维加斯举办的 MIX11 大会对这两个功能进行了介…

【C++grammar】文件系统以及path类使用

目录1.文件系统概述1、关于路径2、如何将某个路径下的所有文件递归地找出来&#xff1f;2.路径类及操作1、path类的成员函数2、path类的非成员函数示例1&#xff1a;展示C17中的path对象的用法示例2&#xff1a;展示Path类中用于分解路径成分的函数示例3&#xff1a;展示path相…

十二、所有功能实现效果演示

一、系统项目架构 Ⅰ&#xff0c;fiber_yy数据库下有五张表 yy_admin&#xff1a;管理员登录账号和密码 yy_textile&#xff1a;纺织面料数据信息 yy_textile_record&#xff1a;用户购买纺织面料信息所存储的面料流水信息 yy_user&#xff1a;用户登录注册信息 yy_user_reco…

leetcode 322. 零钱兑换 思考分析

目录1、题目2、思路分析3、参考链接1、题目 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1。 你可以认为每种硬币的数量是无限的。 提示&#xff1a; 1 …

二、训练fashion_mnist数据集

一、加载fashion_mnist数据集 fashion_mnist数据集中数据为28*28大小的10分类衣物数据集 其中训练集60000张&#xff0c;测试集10000张 from tensorflow import keras import tensorflow as tf import matplotlib.pyplot as plt import numpy as npfashion_mnist keras.data…

四、卷积神经网络(Convolution Neural Networks)

一、CNN(Convolution Neural Networks) 卷积神经网络基本思想&#xff1a;识别物体的特征&#xff0c;来进行判断物体 卷积Convolution&#xff1a;过滤器filter中的数值与图片像素值对应相乘再相加&#xff0c;6 * 6卷积一次(步数为1)变成4 * 4 Max Pooling&#xff1a;对卷积…

POJ3096Surprising Strings(map)

题意&#xff1a;输入很多字符串&#xff0c;以星号结束。判断每个字符串是不是“Surprising Strings”&#xff0c;判断方法是&#xff1a;以“ZGBG”为例&#xff0c;“0-pairs”是ZG&#xff0c;GB&#xff0c;BG&#xff0c;这三个子串不相同&#xff0c;所以是“0-unique”…

五、项目实战---识别人和马

一、准备训练数据 下载数据集 validation验证集 train训练集 数据集结构如下&#xff1a; 将数据集解压到自己选择的目录下就行 最后的结构效果如下&#xff1a; 二、构建模型 ImageDataGenerator 真实数据中&#xff0c;往往图片尺寸大小不一&#xff0c;需要裁剪成一样…

leetcode 122. 买卖股票的最佳时机 II 思考分析

目录题目贪心法题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必…

css设置a连接禁用样式_使用CSS禁用链接

css设置a连接禁用样式Question: 题&#xff1a; Links are one of the most essential aspects of any web page or website. They play a very important role in making our website or web page quite responsive or interactive. So the topic for discussion is quite pe…