[M差分] lcxx. 访问消失节点的最少时间(差分+贪心+读题+思维)

1. 题目来源

链接:xx. 使差值相等的最少数组改动次数

2. 题目解析

挺有意思的一道差分题目,来自与 2024年07月20日,lc 第135双周三的 Q3。全场大约 500 人做出来。算是一个比较难的 Q3 了,看起来大家对差分数组的知识理解和应用,还有所不足啊哈哈。

思路:

  • 首先读题,题目有要求: nums[i] <= k,所以所有可能出现的 X 都是在 [0, k] 之间。

  • 看数据范围,1e5 的时间范围,动态规划肯定也不行了,枚举 i,枚举 X 都是没啥前途的了。

  • 那么思路就被限定在了:分类讨论、贪心。这类 O(n) 算法里面了。

  • 看下我们的操作,假定 a=nums[i], b = nums[n - i - 1], d = |a-b|,如果只修改一个数的话,可以获取到的最大取值范围即:m=max(a, k - a, b, k - b),也就是说:

  • 0<=X<d 时,只需要操作一次,即可让两数差值等于这个 X。

  • X=d 时,无需操作

  • d< x <= m 时,也只需要操作一次,即可让两数差值等于这个 X。

  • x > m 时,我们只能操作两次,才能让两数差值等于这个 X。

所以,可以遍历所有的数,求得 d,分别记录变成各个 X 的操作次数。

在上面的讨论,将 X 分段进行了讨论,我们需要将 [0, d) 这个区间段的所有 X 都需要 +1,因为都是等价的 X,所以比较自然的引入了 差分数组,给区间整体加上固定值。

最后,前缀和求和差分数组即可,每个下标都是 X 的需要的操作数。


挺不错的题目,需要一点分类讨论的思想,差分练习不错的题目。要时刻谨记:

  • 差分操作是可以给一段区间加上一个固定的数。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

class Solution {
public:
    int minChanges(vector<int>& nums, int k) {
        int n = nums.size();
        int f[k + 2]; // 统计所有 X 的操作次数
        memset(f, 0, sizeof(f));

        // 枚举每个数对
        for (int i = 0; i < n / 2; i ++ ) {
            int a = nums[i], b = nums[n - i - 1];
            int d = abs(a - b);
            int m = max({a, k - a, b, k - b});  // 枚举数对最大的变化范围,在此一定有:m>=d

            // 差分数组记录 落在各个区间 X 的操作数
            // 0 <= X < d
            f[0] ++ , f[d] --;
            // d < X <= m
            f[d + 1] ++ ,f[m + 1] -- ;
            // x >= m
            f[m + 1] += 2 ;
        }

        int res = n;
        for (int i = 0, s = 0; i < k + 1; i ++ ) {  // 差分求和,统计 X=i 需要的操作总数
            s += f[i];
            res = min(res, s);
        }

        return res;
    }
};
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: lcx.exe和lcx64.exe是一种端口映射工具。端口映射是一种网络技术,可以将一个端口上的网络数据转发到另一个端口上。通过使用lcx.exe或lcx64.exe,我们可以实现将本地的一个端口与远程主机的一个端口进行映射。 lcx.exe是32位的版本,而lcx64.exe是64位的版本。由于计算机的操作系统可能是32位或64位的不同版本,因此提供了这两个版本以适应不同的操作系统环境。 使用lcx.exe或lcx64.exe进行端口映射可以有很多用途。例如,当我们需要访问远程主机上的某个端口时,但由于某些原因无法直接访问,我们可以使用这些工具将本地的一个端口与远程主机的该端口进行映射,从而实现对远程主机上的端口的访问。 另外,lcx.exe和lcx64.exe还可以用于网络安全测试和渗透测试。通过端口映射,我们可以在本地主机上创建一个代理,将远程主机上的服务转发到本地主机上进行分析和测试。这可以帮助我们评估系统的安全性,并发现可能存在的漏洞。 总之,lcx.exe和lcx64.exe是一种非常方便的端口映射工具,可以实现本地端口与远程主机端口的映射,对于远程访问和网络安全测试都具有重要的作用。 ### 回答2: LCX(Loopback Connection)是一种端口映射工具,可以将本地端口与远程端口进行映射,实现连接的转发和反向连接。lcx.exe32位和lcx64.exe位是两个不同架构的LCX工具。 lcx.exe32位是适用于32位操作系统的LCX工具版本,可以在32位的Windows系统上使用。它能够通过端口映射实现本地服务的转发和穿透,让远程主机能够访问本地服务。它是基于32位架构的编译和运行的,适用于32位操作系统的特性和架构。 lcx64.exe位是适用于64位操作系统的LCX工具版本,可以在64位的Windows系统上使用。与lcx.exe32位相比,它是针对64位系统进行编译和优化的。相比于32位版本,lcx64.exe位可以更好地适应64位系统的特性和架构,提高性能和稳定性。 无论是lcx.exe32位还是lcx64.exe位,它们都提供了一种简单而强大的工具来进行端口映射,帮助用户轻松地实现本地服务的穿透和远程访问。用户可以根据自己的操作系统架构选择合适的版本来使用,以获得更好的体验和性能。 ### 回答3: lcx.exe32位和lcx64.exe位是一种端口映射工具,用于在计算机网络中建立传输通道,实现端口之间的数据交换。它能够实现多种映射方式,如本地端口映射、远程端口映射和监听映射。 lcx.exe32位和lcx64.exe位的工作原理是通过将本地端口与远程端口进行映射,使得程序在使用本地端口通信时,实际上是经过远程端口进行通信。这样的映射操作可以提供更高的安全性和灵活性,同时隐藏真实的网络架构和IP地址。 端口映射工具的应用场景非常广泛。比如,在企业网络中,可以使用端口映射工具来实现内部主机与外部网络的通信,从而确保内部网站和服务器能够被外部网络访问;在网络安全测试中,可以使用端口映射工具进行端口扫描和漏洞检测,以评估网络安全性;在软件开发中,可以使用端口映射工具来进行本地调试和远程调试,方便开发人员进行程序调试和测试等。 总之,lcx.exe32位和lcx64.exe位是一种功能强大的端口映射工具,可以帮助用户建立安全可靠的数据通信通道,提高网络的性能和灵活性,应用场景非常广泛。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值