【Leetcode Sheet】Weekly Practice 16

Leetcode Test

1334 阈值距离内邻居最少的城市(11.14)

n 个城市,按从 0n-1 编号。给你一个边数组 edges,其中 edges[i] = [fromi, toi, weighti] 代表 fromitoi 两个城市之间的双向加权边,距离阈值是一个整数 distanceThreshold

返回能通过某些路径到达其他城市数目最少、且路径距离 最大distanceThreshold 的城市。如果有多个这样的城市,则返回编号最大的城市。

注意,连接城市 i 和 j 的路径的距离等于沿该路径的所有边的权重之和。

提示:

  • 2 <= n <= 100
  • 1 <= edges.length <= n * (n - 1) / 2
  • edges[i].length == 3
  • 0 <= fromi < toi < n
  • 1 <= weighti, distanceThreshold <= 10^4
  • 所有 (fromi, toi) 都是不同的。

【Floyd】

int findTheCity(int n, int** edges, int edgesSize, int* edgesColSize, int distanceThreshold) {int ans[2] = {INT_MAX >> 1, -1};//初始化mp矩阵int mp[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {mp[i][j] = INT_MAX >> 1;}}//赋值mp矩阵for (int i = 0; i < edgesSize; i++) {int from = edges[i][0], to = edges[i][1], weight = edges[i][2];mp[from][to] = mp[to][from] = weight;}//计算Floydfor (int k = 0; k < n; ++k) {//对角线,k到k的距离是0mp[k][k] = 0;for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {//更新Floyd距离mp[i][j] = fmin(mp[i][j], mp[i][k] + mp[k][j]);}}}//统计距离阈值内的城市数目for (int i = 0; i < n; ++i) {int cnt = 0;//计算以i为起点,在距离阈值内的j城市数目for (int j = 0; j < n; ++j) {if (mp[i][j] <= distanceThreshold) {cnt++;//实际上这里计算了m[k][k],但是由于每一个城市都多计算了一个,所以没有影响}}//如果cnt的城市数目更少,更新ans0为计数,ans1为编号if (cnt <= ans[0]) {ans[0] = cnt;ans[1] = i;}}//返回城市编号return ans[1];
}

2656 K个元素的最大和(11.15)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分:

  1. nums 中选择一个元素 m
  2. 将选中的元素 m 从数组中删除。
  3. 将新元素 m + 1 添加到数组中。
  4. 你的得分增加 m

请你返回执行以上操作恰好 k 次后的最大得分。

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • 1 <= k <= 100

【贪心】

int maximizeSum(int* nums, int numsSize, int k){int max=0;for(int i=0;i<numsSize;i++){max=fmax(max,nums[i]);//O(n)找到nums的最大值}//max , max+1, ...,max+k-1,高斯求和即可return max*k+(k-1)*k/2;
}

2760 最长奇偶子数组(11.16)

给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold

请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 <= l <= r < nums.length) 且满足以下条件的 最长子数组

  • nums[l] % 2 == 0
  • 对于范围 [l, r - 1] 内的所有下标 inums[i] % 2 != nums[i + 1] % 2
  • 对于范围 [l, r] 内的所有下标 inums[i] <= threshold

以整数形式返回满足题目要求的最长子数组的长度。

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

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • 1 <= threshold <= 100
int longestAlternatingSubarray(int* nums, int numsSize, int threshold){int cnt=0,n=numsSize,left=0;while(left<n){if(nums[left]>threshold || nums[left]%2==1){left++;continue;}int start=left;left++;while(left<n && nums[left]<=threshold && nums[left]%2!=nums[left-1]%2){left++;}cnt=fmax(cnt,left-start);}return cnt;
}
//时间复杂度O(n),一次遍历,left只增不减

2736 最大和查询(11.17)

给你两个长度为 n 、下标从 0 开始的整数数组 nums1nums2 ,另给你一个下标从 1 开始的二维数组 queries ,其中 queries[i] = [xi, yi]

对于第 i 个查询,在所有满足 nums1[j] >= xinums2[j] >= yi 的下标 j (0 <= j < n) 中,找出 nums1[j] + nums2[j]最大值 ,如果不存在满足条件的 j 则返回 -1

返回数组 answer *,*其中 answer[i] 是第 i 个查询的答案。

提示:

  • nums1.length == nums2.length
  • n == nums1.length
  • 1 <= n <= 105
  • 1 <= nums1[i], nums2[i] <= 109
  • 1 <= queries.length <= 105
  • queries[i].length == 2
  • xi == queries[i][1]
  • yi == queries[i][2]
  • 1 <= xi, yi <= 109

【单调栈 + 二分】

class Solution {
public:vector<int> maximumSumQueries(vector<int>& nums1, vector<int>& nums2, vector<vector<int>>& queries) {vector<pair<int, int>> sortedNums;vector<tuple<int, int, int>> sortedQueries;for (int i = 0; i < nums1.size(); i++) {sortedNums.emplace_back(nums1[i], nums2[i]);}sort(sortedNums.begin(), sortedNums.end(), greater<pair<int, int>>());for (int i = 0; i < queries.size(); i++) {sortedQueries.emplace_back(i, queries[i][0], queries[i][1]);}sort(sortedQueries.begin(), sortedQueries.end(), [](tuple<int, int, int> &a, tuple<int, int, int> &b) {return get<1>(a) > get<1>(b);});vector<pair<int, int>> stk;vector<int> answer(queries.size(), -1);int j = 0;for (auto &[i, x, y] : sortedQueries) {while (j < sortedNums.size() && sortedNums[j].first >= x) {auto [num1, num2] = sortedNums[j];while (!stk.empty() && stk.back().second <= num1 + num2) {stk.pop_back();}if (stk.empty() || stk.back().first < num2) {stk.emplace_back(num2, num1 + num2);}j++;}int k = lower_bound(stk.begin(), stk.end(), make_pair(y, 0)) - stk.begin();if (k < stk.size()) {answer[i] = stk[k].second;}}            return answer;}
};

2342 数位和相等数对的最大和(11.18)

给你一个下标从 0 开始的数组 nums ,数组中的元素都是 整数。请你选出两个下标 iji != j),且 nums[i] 的数位和 与 nums[j] 的数位和相等。

请你找出所有满足条件的下标 ij ,找出并返回 nums[i] + nums[j] 可以得到的 最大值

提示:

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

【hash】

int maximumSum(int* nums, int numsSize) {int hash[82];for(int i=0;i<82;i++){hash[i]=0;}int ret=-1;for(int i=0;i<numsSize;i++){int sum=0,temp=nums[i];while(temp>0){sum+=temp%10;temp/=10;}if(hash[sum]>0){ret=fmax(ret,hash[sum]+nums[i]);}hash[sum]=fmax(hash[sum],nums[i]);}return ret;
}

689 三个无重叠子数组的最大和(11.19)

给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。

以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。

提示:

  • 1 <= nums.length <= 2 * 104
  • 1 <= nums[i] < 216
  • 1 <= k <= floor(nums.length / 3)

【滑动窗口】

class Solution {
public:vector<int> maxSumOfThreeSubarrays(vector<int>& nums, int k) {vector<int> ans;int sum1=0,maxsum1=0,maxsum1id=0;int sum2=0,maxsum12=0,maxsum12id1=0,maxsum12id2=0;int sum3=0,maxsum3=0;//初始化for(int i=k*2;i<nums.size();i++){//以第三个窗口为基准,进行判定sum1+=nums[i-k*2];sum2+=nums[i-k];sum3+=nums[i];//求出当前三个窗口的元素和,也就是初始的划分if(i>=k*3-1){//如果第三个窗口已经遍历完成if(sum1>maxsum1){//如果新的sum1大于原来的,则更新maxsum1maxsum1=sum1;maxsum1id=i-k*3+1;//同时更新maxsum1的id}if(maxsum1+sum2>maxsum12){//如果新的sum12大于原来的,则更新maxsum12maxsum12=maxsum1+sum2;maxsum12id1=maxsum1id;maxsum12id2=i-k*2+1;}if(maxsum12+sum3>maxsum3){//如果新的sum123大于原来的,则更新maxsum3maxsum3=maxsum12+sum3;ans={maxsum12id1,maxsum12id2,i-k+1};}sum1-=nums[i-k*3+1];sum2-=nums[i-k*2+1];sum3-=nums[i-k+1];//已经向右滑动了,去掉首位值}}return ans;}
};
/*使用3个大小为k的滑动窗口sum1是第一个的元素和,【0,k-1】sum2是第二个的元素和,【k,2k-1】sum3是第三个的元素和,【2k,3k-1】同时向右滑动三个窗口维护maxsum12和对应的位置仅当元素和超过最大元素和时才修改最大元素和
*/

53 最大子数组和(11.20)

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

【动态规划】

int maxSubArray(int* nums, int numsSize){int f=0,max=nums[0];for (int i=0;i<numsSize;i++){f=fmax(f+nums[i],nums[i]);  //最大前缀和维护,f(i)=f(i-1)+nums[i] or f(i)=nums[i]max=fmax(max,f);            //最大值维护,旧值or最大前缀和+当前nums[i]}return max;
}
//f(i) 代表以第 i 个数结尾的「连续子数组的最大和」
//求出每个位置的 f(i),然后返回 f 数组中的最大值即可

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

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

相关文章

Hibernate 一级缓存,二级缓存,查询缓存

概念&#xff1a; 1.什么是缓存呢&#xff1f; 缓存&#xff1a;是计算机领域的概念&#xff0c;它介于应用程序和永久性数据存储源之间。 缓存&#xff1a;一般人的理解是在内存中的一块空间&#xff0c;可以将二级缓存配置到硬盘。用白话来说&#xff0c;就是一个存储数据的…

Web前端—移动Web第三天(移动Web基础、rem、less、综合案例—极速问诊)

版本说明 当前版本号[20231120]。 版本修改说明20231120初版 目录 文章目录 版本说明目录移动 Web 第三天01-移动 Web 基础谷歌模拟器屏幕分辨率视口二倍图适配方案 02-rem简介媒体查询rem 布局flexible.jsrem 移动适配 03-less注释运算嵌套变量导入导出禁止导出 04-综合案例…

GNSS技术在灾害监测与应急响应中的关键作用

全球导航卫星系统&#xff08;GNSS&#xff09;技术在灾害监测与应急响应领域发挥着重要作用&#xff0c;为预防、监测和应对自然灾害提供了关键数据支持。本文将深入探讨GNSS技术在灾害监测与应急响应中的作用&#xff0c;并分析其对提高应对灾害能力的重要性。 一、GNSS在灾害…

android报错

&#xff08;gradle版本&#xff1a;7.5-all.zip; gradle插件&#xff1a;7.4.2&#xff1b;java:11) 报错1&#xff1a; java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode 2023-11-20 19:39:39.207 22390-22390 AndroidRuntime com…

InnoDB 的一次更新事务是怎么实现的?

大体流程&#xff1a; 步骤: 1.加载数据到缓存中&#xff08;Buffer Pool&#xff09;&#xff1a; 在进行数据更新时&#xff0c;InnoDB首先会在缓冲池&#xff08;Buffer Pool&#xff09;中查找该记录是否已经在内存中。如果记录不在内存中&#xff0c;会将需要更新的数据…

2021年03月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 小猫在沙漠中旅行好不容易找到了一杯水,初始位置如下图所示,下面哪个程序可以帮助它成功喝到水? A: B: C: D:

基于像素特征的kmeas聚类的图像分割方案

kmeans聚类代码 将像素进行聚类&#xff0c;得到每个像素的聚类标签&#xff0c;默认聚类簇数为3 def seg_kmeans(img,clusters3):img_flatimg.reshape((-1,3))# print(img_flat.shape)img_flatnp.float32(img_flat)criteria(cv.TERM_CRITERIA_MAX_ITERcv.TERM_CRITERIA_EPS,2…

stack和queue简单实现(容器适配器)

容器适配器 stack介绍stack模拟实现queue 介绍queue模拟实现deque stack介绍 stack模拟实现 以前我们实现stack&#xff0c;需要像list,vector一样手动创建成员函数&#xff0c;成员变量。但是stack作为容器适配器&#xff0c;我们有更简单的方法来实现它。 可以利用模板的强大…

练习六-使用Questasim来用verilog使用function函数

[TOC](使用Questasim来用verilog使用function函数 1&#xff0c;verilog中使用函数function2&#xff0c;RTL代码3&#xff0c;测试代码4&#xff0c;输出波形 1&#xff0c;verilog中使用函数function 目的&#xff1a; &#xff08;1&#xff09;了解函数的定义和在模块设计中…

【面试】测试/测开(未完成版)

1. 黑盒测试方法 黑盒测试&#xff1a;关注的是软件功能的实现&#xff0c;关注功能实现是否满足需求&#xff0c;测试对象是基于需求规格说明书。 1&#xff09;等价类&#xff1a;有效等价类、无效等价类 2&#xff09;边界值 3&#xff09;因果图&#xff1a;不同的原因对应…

日常办公:批处理编写Word邮件合并获取图片全路径

大家在使用Word邮件合并这个功能&#xff0c;比如制作席卡、贺卡、准考证、员工档案、成绩单、邀请函、名片等等&#xff0c;那就需要对图片路径进行转换处理&#xff0c;此脚本就是直接将图片的路径提取出来&#xff0c;并把内容放到txt格式的文本文档里&#xff0c;打开Excel…

AcWing 4. 多重背包问题 I 学习笔记

有 N&#xfffd; 种物品和一个容量是 V&#xfffd; 的背包。 第 i&#xfffd; 种物品最多有 si&#xfffd;&#xfffd; 件&#xff0c;每件体积是 vi&#xfffd;&#xfffd;&#xff0c;价值是 wi&#xfffd;&#xfffd;。 求解将哪些物品装入背包&#xff0c;可使物…

JudgeOpen整理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

九韵和声 饕餮盛宴丨音乐和声与校友情谊的完美交融

“九韻和聲”音樂會於11月19日晚上在深圳大劇院盛大舉行。來自各高校深圳校友會的逾千名同學們歡聚一堂&#xff0c;共同慶祝自己的合唱音樂會。 首次舉辦合唱音樂會 “九韵和声”音乐会由深圳市西安交通大学校友会牵头发起、主办&#xff0c;与深圳市清华大学校友会、深圳市浙…

基于非链式(数组)结点结构的二叉树的前(先)序输入创建以及遍历

点击链接返回标题->基于非链式(数组)结点结构的二叉树的层序、先序、中序、后序输入创建以及层序、先序、中序、后序输出-CSDN博客 我们采用递归的思想&#xff0c;不断去找空结点&#xff08;值为-1的结点&#xff09;&#xff0c;在找空结点这个过程中&#xff0c;将输入的…

微信小程序知识付费平台,公众号App+SAAS+讲师端,多端部署

三勾知识付费系统基于thinkphp8element-plusuniapp打造的面向开发的知识付费系统&#xff0c;方便二次开发或直接使用&#xff0c;可发布到多端&#xff0c;包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能包含直播…

欧拉操作系统下离线安装字体的操作步骤

背景 某 Web 应用部署到欧拉操作系统后&#xff0c;应用中导出的 PDF 文件中文全部显示乱码&#xff0c;原因是字体缺失&#xff0c;但是目标系统上并没有联网&#xff0c;必须找到字体的离线安装包。 CSDN 上还有40个积分&#xff0c;下载了两个相关的资源后&#xff0c;目标…

OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界

OpenAI 董事会闹剧应该是暂告一个段落了,Sam Altman和Greg Brockman等一众高管均已加入微软,还有员工写联名信逼宫董事会的戏码,关注度已经降下来了。 但是,这场宫斗闹剧的中心人物Ilya Sutskever大家关注度不算太高。他本人是纯粹的技术男,极少抛头露面透露其内心世界。…

FISCO BCOS 3.0【01】搭建第一个区块链网络

官方技术文档:https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html 我们在官方技术文档的基础上,进行,对文档中一些不清楚的地方进行修正 搭建Air版本FISCO BCOS联盟链本节以搭建单群组FISCO BCOS链为例操作,使用开发部署工具build_chain.sh脚本在本地搭建一条…

Java算法(八)手写String集合元素去重的两种实现方式 正序 逆序 删除集合中符合条件的字符串

Java算法&#xff08;八&#xff09;&#xff1a; 实现集合去重 需求&#xff1a;创建一个存储String的集合&#xff0c;内部存储&#xff08;test&#xff0c; 张三&#xff0c; test&#xff0c;test, 李四&#xff09;字符串 删除所有的test字符串&#xff0c;删除后&#…