【LeetCode - 798】得分最高的最小轮调(转化法)

解题报告:

思路一:这题首先说一个nlogn的方法。

首先一个主客转化,题目描述是说把数组做翻转,idx不变,然后nums[i]和i作比较。那么我们可以转化为让数组不变,idx转变,即:假设刚开始i=4,那么idx的变化为[4,3,2,1,0,n-1,...,5],再用nums[i] -  idx,如果这个值>0,则是符合区间的k。具体来说,比如

nums = [ 2, 3, 1, 4, 0],对应的idx
idx  = [ 0, 1, 2, 3, 4],作差后
diff = [-2,-2, 1,-1, 4],此时k=0,然后移动一次的话,diff变为
diff = [ 2,-3, 0,-2, 3],此时k=1,
diff = [ 1, 1,-1,-3, 2],此时k=2,
diff = [ 0, 0, 3,-4, 1],此时k=3,

即,不难发现,每次k变化的时候的时候,对应的就是全数组-1,然后在第k-1的位置上+n。

然后数组中>=0的元素个数就是k轮调的时候的答案。

因此我们需要,区间更新,单点更新吗,区间查询,这三个操作,可以用线段树维护,因而复杂度是nlogn。

思路二:

可以有两种方法过渡到思路二:

其一:刚刚的方法一直是在数组上做文章,即固定数组是不变的,然后变化k,来维护答案。那可否考虑直接从k上做文章,因为k最多就1e5,建立一个k的数组,我们直接考虑对于数组中的每个元素,会影响到哪些k值,做对应的更新。

其二:之前的想法是对于每一个k,遍历所有的元素找出对应答案。那么也可以对于每一个元素,考虑他会对哪些k产生影响,然后直接从k数组中维护,因此可以建立一个k数组。

综上,我们可以考虑每一个k,用类似数形结合的方法,可以方便的发现,当i<nums[i]时,k数组中只 有一段区间需要更新,当i>=nums[i]时,k数组中有两段区间需要更新。

这种思路还有一个好处就是,我们不需要动态更新和查询答案了。我们只需要记录每个元素对答案的影响,然后最后对答案数组查询一次就行了。

因此我们需要,区间更新,区间查询一次。因此我们不需要线段树了,可以用差分数组代替。

这种思路的转换还是很妙的,记录一下。

AC代码:(思路二的解法)

class Solution {
public:int num[200005];int bestRotation(vector<int>& nums) {int n = nums.size();for(int i = 0; i<n; i++) {if(i >= nums[i]) {int l = 0, r = i-nums[i];int ll = r + nums[i]+1, rr = n-1;num[l]++;  num[ll]++;num[r+1]--; num[rr+1]--;}else {int l = i+1, r = l1+(n-nums[i]-1);num[l]++;num[r+1]--;}}for(int i = 1; i<n; i++) {num[i] += num[i-1];}int ans = 0;for(int i = 0; i<n; i++) {if(num[i] > num[ans]) {ans = i;}}return ans;}
};

 

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

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

相关文章

【转】聊聊分布式事务,再说说解决方案

前言 最近很久没有写博客了&#xff0c;一方面是因为公司事情最近比较忙&#xff0c;另外一方面是因为在进行 CAP 的下一阶段的开发工作&#xff0c;不过目前已经告一段落了。 接下来还是开始我们今天的话题&#xff0c;说说分布式事务&#xff0c;或者说是我眼中的分布式事务…

【LeetCode - 2049】统计最高分的节点数目

解题报告&#xff1b; 直接dp。注意mx也得longlong AC代码&#xff1a; class Solution { public:vector<int> vv[200005];int sum[200005];long long ans[200005];int n;void dfs(int x) {ans[x] 1; sum[x] 1;for(int i 0; i<vv[x].size(); i) {dfs(vv[x][i]);s…

Web Service 实现分布式事务

首先要声明&#xff0c;不推荐在web service中实现分布式事务。 原因如下&#xff1a;   1、webservice在通信层上是一种无连接的协议&#xff0c;每两次调用之间&#xff0c;tcp连接是断开的。而分布式事务需要保存事务上下文&#xff0c;这是一个难点   2、web service是…

【LeetCode每日一题】2024. 考试的最大困扰度

​​​​​​力扣 解题报告&#xff1a; 因为只有T和F两个元素&#xff0c;不难证明单向性。尺取法解决。当然这题也可以二分。 AC代码&#xff1a; class Solution { public:int maxConsecutiveAnswers(string answerKey, int k) {int l 0, r 0;int T 0, F 0;int ans …

使用WebService如何实现分布式事务

在 System.EnterpriseServices 名称空间中实现了COM服务的相关类&#xff0c;其中就提供事务支持。 你可以在你的方法上加上TransactionAttribute特性标记&#xff0c;那个方法就支持事务了。 然后在那个方法中就可以用ContextUtil.SetComplete()和ContextUtil.SetAbort()方法分…

【Leetcode - 172】阶乘后的零(思维)

给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0 示例 2&#xff1a; 输入&#xff1a;n 5 输出&…

linq、lambda、entity framework之间的关系

lambda&#xff1a; 一种匿名委托的精简版写法&#xff0c;明显的标志是>符号 entity framework&#xff08;简称EF&#xff09;&#xff1a; 微软访问数据库的最快捷最成熟的框架&#xff08;ORM&#xff09;&#xff0c;在EF出现以前有SqlHelper、NHibernate等访问数据库…

2022-08-20-网易笔试题

写在前面 题目收集来源自网络&#xff0c;前四题是开发岗的&#xff0c;后四题是算法岗的&#xff0c;因为代码无处提交&#xff0c;不一定正确&#xff0c;就不贴出来了&#xff0c;这里只写一下我的思路吧~欢迎大家一起讨论~~ 1、 思路&#xff1a;因为最大1e9&#xff0c…

TUN/TAP设备浅析(一) -- 原理浅析

TUN/TAP设备浅析 TUN设备 TUN 设备是一种虚拟网络设备&#xff0c;通过此设备&#xff0c;程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据&#xff0c;更通俗一点的说&#xff0c;通过它&#xff0c;我们可以处理 IP 数据包…

2022-08-21 星环科技-C++开发笔试

1、 思路&#xff1a;拓扑排序&#xff0c;不解释了 2、 思路&#xff1a; 本来以为他是一个图论问题&#xff0c;找最大环。 但其实对于这种情况&#xff0c;他是要输出0的&#xff0c;而不是9&#xff0c;所以他不是一个图论问题&#xff0c;他带有顺序性&#xff0c;这种可…

TUN/TAP设备浅析(二) -- TUN/TAP的编程

这篇文章想详细阐述一下有关于 TUN/TAP 设备的编程。 其实关于这两种设备的编程&#xff0c;基本上属于八股文&#xff0c;大家一般都这么干。 启动设备之前 有的linux 并没有将tun 模块编译到内核之中&#xff0c;所以&#xff0c;我们要做的第一件事情就是检查我们的系统是…

【算法练习题】位运算(贪心)

题目&#xff1a; 解题报告&#xff1a; 首先预备几个结论&#xff1a; 1、对于两个数a,b &#xff0c;生成a&b和a|b&#xff0c;则一定对应一个常数c&#xff0c;使得生成的两个数分别是ac和a-c。 2、对于两个数a,b&#xff0c;生成a&b和a|b的前后&#xff0c;二进…

TUN/TAP设备浅析(三) -- TUN/TAP设备的应用

上一篇文章主要讲述了TUN/TAP设备的一些原理&#xff0c;你可能会好奇&#xff0c;TUN/TAP设备究竟有什么用处呢&#xff1f;所以这篇文章&#xff0c;我想用一些实际的例子来回答这个问题。 例子源自陈硕老师的博客&#xff0c;博文中关于TUN/TAP设备的使用非常典型&#xff…

【20220903-美团笔试】

参考&#xff1a;20220903美团笔试题解_笔经面经_牛客网 前两个签到题就不整理了 第三题&#xff1a; 给定一棵有n个节点的树&#xff0c;节点用1,2,…n编号。1号节点为树的根节点&#xff0c;每个节点上有一个用大写字母表示的标记。求每个 节点的子树中出现的字母标记种类…

云计算底层技术-虚拟网络设备(Bridge,VLAN)

openstack底层技术-各种虚拟网络设备一(Bridge,VLAN) openstack底层技术-各种虚拟网络设备二(tun/tap,veth) Linux BridgeBridge与netfilterVLAN VLAN设备原理及配置VLAN在openstack中的应用IBM网站上有一篇高质量文章Linux 上的基础网络设备详解。本文会参考文章部分内容&…

【Codeforce-911D】逆序对

题干&#xff1a; Problem - D - Codeforces 解题报告&#xff1a; 不难发现&#xff0c;假设n的倒序排列(n,n-1,...,3,2,1)的逆序对是x&#xff0c;则对n的任意一个逆序对数为y的排列做翻转&#xff0c;新生成的排列的逆序对数位x-y。 因此这题作为奇偶性&#xff0c;其实只…

【LeetCode-面试题 17.09 - medium】第 k 个数

力扣 解题报告&#xff1a; 法一&#xff1a;优先队列做bfs。 法二&#xff1a;看成三个有序链表&#xff0c;做三路归并即可。 注意这里归并&#xff0c;如果多个指针最小值&#xff0c;那么这些指针都需要

10分钟精通SharePoint-验证方式

简介 说到身份验证大家应该不陌生&#xff0c;访问任何平台或系统都需要身份验证&#xff0c;SharePoint也不例外&#xff0c;用户身份验证可根据身份验证提供程序验证用户的身份&#xff0c;身份验证提供程序包含用户平局切可以确认用户正确提交这些平均的目录或数据库。用于…

【18周-钻石】能量供应

思路&#xff1a; 总纲是贪心&#xff0c;按终点排序&#xff0c;然后优先往右边排能量塔。具体实现的时候需要单点更新&#xff0c;区间查询&#xff0c;所以用树状数组set维护一下&#xff0c;就OK了。 代码&#xff1a;&#xff08;不知道为啥有一个样例RE了&#xff09; …

【LeetCode-2421(hard)】好路径的数目

解题报告&#xff1a; 提供两种解法&#xff1a;1、并查集。2、启发式合并。3、树分治&#xff08;点分治&#xff0c;但是校招应该不会问到这个难度吧&#xff0c;&#xff0c;不复习了就&#xff09; 解题思路1&#xff1a; 两种思考方式可以想到这个解法。 1、【由特解到…