惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Simon Willison's Weblog
Simon Willison's Weblog
K
Kaspersky official blog
P
Palo Alto Networks Blog
Google DeepMind News
Google DeepMind News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AI
AI
G
GRAHAM CLULEY
O
OpenAI News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Help Net Security
Help Net Security
L
LINUX DO - 热门话题
S
Schneier on Security
P
Privacy International News Feed
L
Lohrmann on Cybersecurity
SecWiki News
SecWiki News
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
A
Arctic Wolf
C
Cisco Blogs
V2EX - 技术
V2EX - 技术
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
Latest news
Latest news
人人都是产品经理
人人都是产品经理
Schneier on Security
Schneier on Security
Last Week in AI
Last Week in AI
Webroot Blog
Webroot Blog
美团技术团队
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
Security Archives - TechRepublic
Security Archives - TechRepublic
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Project Zero
Project Zero
博客园_首页
Cloudbric
Cloudbric
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
The Last Watchdog
The Last Watchdog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tenable Blog
Scott Helme
Scott Helme

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 防止AI爬取你的博客 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 博客自动发布方案 某公众号废案 fail2ban基本使用 Podman 环境使用 Nginx Proxy Manager 最佳实践 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程 FastMail迁移至GMail+Cloudflare Email Routing 读《黑客与画家》 Astro添加过渡后DarkModeToggle按钮失效 nuxt3使用echarts5渲染中国地图 人生刻度 又到凤凰花朵开放的时候 2023-05-10 实习结束 2023-04-26 广州博物馆游记 YOASOBI「たぶん」官方音乐视频 风灵玉秀-发如雪 带我的老哥离职了 从p10k转向Starship lunarvim国内安装踩坑记录 什么是对称加密非对称加密、密钥交换、数字签名、证书 强调体验的一种思考时间的方式 ArchLinux使用vscode编写latex报错The font "FontAwesome" cannot be found ArchLinux安装(移动硬盘)流程 yay一个或多个文件没有通过有效性检查! 2022年终 hugo建站伊始 clash设置relay前置代理(校园网破解改进记录) 群青 · YOASOBI · Ayase 华为 matepad pro 11使用体验 Nginx使用acme.sh免费安装ssl证书 永远属于你的安娜 在线 童年趣事 童心,是比野心更难得的梦想 2021年终总结 基于jeeSite的软件测试课程作业 流程记录 Linux不同用户安装不同版本jdk Wifi4更换Wifi6路由器的使用体验 Flask 上传图片并灰度显示 玩客云刷机debain个人记录 jython 简单入门 Jenkins 个人搭建流程记录 集成邮件系统(qq邮箱),gitlab服务器,freestyle风格 在Web项目中配置Log4j --指南-- Codeforces Round 753 (Div. 3) ABCDE 浅谈fork函数 JavaWeb servlet 使用Cookie记录用户访问次数 Codeforces Round Educational Codeforces Round 114 (Rated for Div. 2) ABC 2021牛客多校7 I xay loves or 2021牛客多校9 H Happy Number 2021牛客多校8 D OR 2021牛客多校5 B Boxes 2021牛客多校5 H Holding Two 2021牛客多校2 D Er Ba Game 2021牛客多校1 F Find 3-friendly Integers 2021牛客多校1 B Ball Dropping 记人生第一次投简历和笔试 原型模式 2021-2-20 雨时随记 关于一维差分数组的例子 halo个人建站 关于手机ping电脑和电脑ping手机 泛型类简单理解 CodeForces - 849C From Y to Y 2020牛客国庆集训派对day3 Leftbest 约瑟夫环问题---2020牛客国庆集训派对day2 AKU NEGARAKU mysql 5.7 忘记密码如何更改 CF 1099B Squares and Segments CF 998A Balloons CF 998B Cutting 链表应用之多项式相加 CF 1150A Stock Arbitraging CF 1199A City Day CF 1199B Water Lily CF 982A Row CF 934A A Compatible Pair CF 629B Far Relative’s Problem 651A Joysticks 651B Beautiful Paintings
leetcode 第 391 场周赛
2024-03-31 · via Sehnsucht

第 391 场周赛

前三道只放一下代码,比较简单,重点是第四道,我没写出来

哈沙德数

哈沙德数

class Solution {
public:
    int sumOfTheDigitsOfHarshadNumber(int x) {
        int sum = 0;
        int xx = x;
        while (x > 0) {
            sum += x % 10;
            x /= 10;
        }
        if (xx % sum == 0) return sum;
        return -1;
    }
};

换水问题 II

换水问题 II

class Solution {
public:
    int maxBottlesDrunk(int numBottles, int numExchange) {
        int ans = numBottles;
        while (numBottles >= numExchange) {
            numBottles -= numExchange;
            
            numExchange ++;
            ans ++;
            numBottles ++;
            cout << numBottles << " " << numExchange << endl;
        }
        return ans;
    }
};

交替子数组计数

交替子数组计数

双指针,每次选择最长的交替子数组然后计算

class Solution {
    // 找到最小的子数组,然后算A
public:
    long long A(long long x) {
        return x * (x + 1) / 2;
    }
    long long countAlternatingSubarrays(vector<int>& nums) {
        long long ans = 0;
        
        for (int i=0, j=0; j<nums.size(); ) {
            // j到了最后
            if (j == nums.size() - 1) {
                ans += A(j-i+1);
                j ++;
            } else if (j + 1 < nums.size()) {// j可以往后
                if (nums[j] != nums[j+1]) {// j和下一位不等,继续加
                    j ++;
                } else {// j和下一位相等,相加后继续+
                    ans += A(j-i+1);
                    i = ++j;
                }
            }
        }
        return ans;
    }
};

最小化曼哈顿距离

最小化曼哈顿距离

题目

给你一个下标从 0 开始的数组 points ,它表示二维平面上一些点的整数坐标,其中 points[i] = [xi, yi]

两点之间的距离定义为它们的曼哈顿距离

曼哈顿距离:两个单元格 (xi, yi) 和 (xj, yj) 之间的曼哈顿距离为 |xi - xj| + |yi - yj|

请你恰好移除一个点,返回移除后任意两点之间的 最大 距离可能的 最小 值。

示例 1:

输入:points = [[3,10],[5,15],[10,2],[4,4]] 输出:12 解释:移除每个点后的最大距离如下所示:

  • 移除第 0 个点后,最大距离在点 (5, 15) 和 (10, 2) 之间,为 |5 - 10| + |15 - 2| = 18 。
  • 移除第 1 个点后,最大距离在点 (3, 10) 和 (10, 2) 之间,为 |3 - 10| + |10 - 2| = 15 。
  • 移除第 2 个点后,最大距离在点 (5, 15) 和 (4, 4) 之间,为 |5 - 4| + |15 - 4| = 12 。
  • 移除第 3 个点后,最大距离在点 (5, 15) 和 (10, 2) 之间的,为 |5 - 10| + |15 - 2| = 18 。 在恰好移除一个点后,任意两点之间的最大距离可能的最小值是 12 。 示例 2:

输入:points = [[1,1],[1,1],[1,1]] 输出:0 解释:移除任一点后,任意两点之间的最大距离都是 0 。

提示:

3 <= points.length <= 105 points[i].length == 2 1 <= points[i][0], points[i][1] <= 108

思路

需要用到一个数学技巧:曼哈顿距离转切比雪夫距离

曼哈顿距离就是∣xi−xj∣+∣yi−yj∣|xi - xj| + |yi - yj|

如何转换?

将坐标系顺时针旋转45∘45^\circ(如图1图2),此时x变成为x+yy变成y-x,同时坐标系扩大了2\sqrt{2}

知道这个结论有什么用?

  • 原来未旋转,我们需要的是图三一样的蓝色线路,即原来的曼哈顿距离
  • 当旋转了45∘45^\circ之后,坐标系扩大了2\sqrt{2},那么原来的蓝色线条投射到x轴上,就是除以2\sqrt{2}
  • 乘以根号二除以2\sqrt{2},所以结果不变,所以曼哈顿距离就是旋转后的x的差的绝对值

图四是其他点投影到y轴上

那么如何确定往x投影还是往y投影呢?答案是用max判断如果投影折叠了那就短了,即取两种投影的最大值

这样就可以得到公式

∣x1−x2∣+∣y1−y2∣=max(∣x1,−x2,∣,∣y1,−y2,∣)|x_1 - x_2| + |y_1 - y_2| = max(|x_1^, - x_2^,|, |y_1^, - y_2^,|)

这就是切比雪夫距离

所以曼哈顿距离转换成了最大的x的差值和最大的y的差值

但是题目要求删去最大值,思路是维护一个有序集合,里面装x和y的差值,最后遍历一遍points数组,依次删去点,然后加回来,遍历一遍就知道结果了

灵神图解t

代码

class Solution {
public:
    int minimumDistance(vector<vector<int>> &points) {
	    // 有序可重复set
        multiset<int> xs, ys;
        for (auto &p : points) {
            xs.insert(p[0] + p[1]);
            ys.insert(p[1] - p[0]);
        }
        int ans = INT_MAX;
        // 遍历所有的点
        for (auto &p : points) {
            int x = p[0] + p[1], y = p[1] - p[0];
            // 找到下标然后删除单个点
            xs.erase(xs.find(x));
            ys.erase(ys.find(y));
            // 找到去掉一个点后,得到min(x最大值,y最大值)
            ans = min(ans, max(*xs.rbegin() - *xs.begin(), *ys.rbegin() - *ys.begin()));
            // 加回单个点
            xs.insert(x);
            ys.insert(y);
        }
        return ans;
    }
};

参考: