刚刚,百度和苹果宣布联名
百度 × Apple
就在刚刚,财联社报道,百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。
苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定由百度提供这项服务,苹果预计采取 API 接口的方式计费。
苹果将国行 iPhone 等设备采用国产大模型 AI 功能主要出于合规需求,因为苹果自身短期内还无法解决合规问题,但国外版 iPhone 等设备 AI 功能均来自苹果自己的大模型。
不是黑百度(我们要正视客观差距),相信大多数国行用户心理多少有点不是滋味,国产苹果味 🤣
为什么说大多数,而不是所有国行用户,剩下的小部分是什么人。
是持有「百度」股票的国行用户:

蹭上了果链,百度盘中上涨 6 个点。
本文发出的时候,H 股那边还没收盘,但基本可以断定结局。
中国公司,不管你是 A 股、H 股还是美股,都自带「出利好 = 高开低走」的传统艺能。
关于「百度」和「Apple」本次联名,你怎么看?是否会考虑放弃保修买入海外版?
...
回归主线。
来做一道和「百度」社招相关的算法面试题。
题目描述
平台:LeetCode
题号:649
Dota2 的世界里有两个阵营:Radiant
(天辉)和 Dire
(夜魇)。
Dota2 参议院由来自两派的参议员组成,现在参议院希望对一个 Dota2 游戏里的改变作出决定,他们以一个基于轮为过程的投票进行。
在每一轮中,每一位参议员都可以行使两项权利中的一项:
-
禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利 。 -
宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。
给你一个字符串 s
代表每个参议员的阵营。字母 'R'
和 'D'
分别代表了 Radiant
(天辉)和 Dire
(夜魇)。
然后,如果有 n
个参议员,给定字符串的大小将是 n
。
以轮为基础的过程从给定顺序的第一个参议员开始到最后一个参议员结束,这一过程将持续到投票结束,所有失去权利的参议员将在过程中被跳过。
假设每一位参议员都足够聪明,会为自己的政党做出最好的策略,你需要预测哪一方最终会宣布胜利并在 Dota2 游戏中决定改变。
输出应该是 "Radiant"
或 "Dire"
。
示例 1:
输入:s = "RD"
输出:"Radiant"
解释:
第 1 轮时,第一个参议员来自 Radiant 阵营,他可以使用第一项权利让第二个参议员失去所有权利。
这一轮中,第二个参议员将会被跳过,因为他的权利被禁止了。
第 2 轮时,第一个参议员可以宣布胜利,因为他是唯一一个有投票权的人。
示例 2:
输入:s = "RDD"
输出:"Dire"
解释:
第 1 轮时,第一个来自 Radiant 阵营的参议员可以使用第一项权利禁止第二个参议员的权利。
这一轮中,第二个来自 Dire 阵营的参议员会将被跳过,因为他的权利被禁止了。
这一轮中,第三个来自 Dire 阵营的参议员可以使用他的第一项权利禁止第一个参议员的权利。
因此在第二轮只剩下第三个参议员拥有投票的权利,于是他可以宣布胜利
提示:
-
-
-
senate[i]
为'R'
或'D'
基本分析
整理题意:每次选择对方的一个成员进行消除,直到所有剩余成员均为我方时,宣布胜利。
由于每个对方成员执行权利都意味着我方损失一名成员,因此最佳方式是 「尽量让对方的权利不执行,或延迟执行(意味着我方有更多执行权利的机会)」。因此,最优决策为 「每次都选择对方的下一个行权成员进行消除」。
贪心
这个找“最近一个”对方行权成员的操作既可以使用「有序集合」来做,也可以使用「循环队列」来做。
先说使用「有序集合」的做法。
起始我们先将 s
中的 Radiant
和 Dire
分别存入有序集合 rs
和 ds
当中,然后从前往后模拟消除过程,过程中使用 idx
代表当前处理到的成员下标,使用 set
记录当前哪些成员已被消除。
当轮到 s[idx]
行权时(若 s[idx]
已被消除,则跳过本轮),从对方的有序队列中取出 「首个大于等于 idx
的下标」(取出代表移除);若对方的有序序列不存在该下标,而行权过程又是循环进行的,说明此时下一个行权的对方成员是 「首个大于等于 」 的下标,我们对其进行取出消除,随后往后继续决策。
Java 代码:
class Solution {
public String predictPartyVictory(String s) {
TreeSet<Integer> rs = new TreeSet<>(), ds = new TreeSet<>();
int n = s.length();
for (int i = 0; i < n; i++) {
if (s.charAt(i) == 'R') rs.add(i);
else ds.add(i);
}
Set<Integer> set = new HashSet<>();
int idx = 0;
while (rs.size() != 0 && ds.size() != 0) {
if (!set.contains(idx)) {
TreeSet<Integer> temp = null;
if (s.charAt(idx) == 'R') temp = ds;
else temp = rs;
Integer t = temp.ceiling(idx);
if (t == null) t = temp.ceiling(0);
set.add(t);
temp.remove(t);
}
idx = (idx + 1) % n;
}
return rs.size() != 0 ? "Radiant" : "Dire";
}
}
不难发现,虽然将所有成员存入有序集合和取出的复杂度均为 ,但整体复杂度仍是大于 。
因为我们在每一轮的消除中,从 idx
位置找到下一个决策者,总是需要遍历那些已被消除的位置,而该无效遍历操作可使用「循环队列」优化。
优化
使用循环队列 rd
和 dd
来取代有序集合 rs
和 ds
。起始将各个成员分类依次入队,每次从两队列队头中取出成员,假设从 rs
中取出成员下标为 a
,从 dd
中取出成员下标为 b
,对两者进行比较:
-
若有 a < b
,说明a
先行权,且其消除对象为b
,a
行权后需等到下一轮,对其进行大小为 的偏移后重新添加到rd
尾部(含义为本次行权后需要等到下一轮); -
若有 b < a
,同理,将a
消除后,对b
进行大小为 的偏移后重新添加到dd
尾部。
Java 代码:
class Solution {
public String predictPartyVictory(String s) {
Deque<Integer> rd = new ArrayDeque<>(), dd = new ArrayDeque<>();
int n = s.length();
for (int i = 0; i < n; i++) {
if (s.charAt(i) == 'R') rd.addLast(i);
else dd.addLast(i);
}
while (rd.size() != 0 && dd.size() != 0) {
int a = rd.pollFirst(), b = dd.pollFirst();
if (a < b) rd.addLast(a + n);
else dd.addLast(b + n);
}
return rd.size() != 0 ? "Radiant" : "Dire";
}
}
C++ 代码:
class Solution {
public:
string predictPartyVictory(string s) {
deque<int> rd, dd;
int n = s.length();
for (int i = 0; i < n; i++) {
if (s[i] == 'R') rd.push_back(i);
else dd.push_back(i);
}
while (!rd.empty() && !dd.empty()) {
int a = rd.front(), b = dd.front();
rd.pop_front();
dd.pop_front();
if (a < b) rd.push_back(a + n);
else dd.push_back(b + n);
}
return !rd.empty() ? "Radiant" : "Dire";
}
};
Python 代码:
from collections import deque
class Solution:
def predictPartyVictory(self, s: str) -> str:
rd, dd = deque(), deque()
n = len(s)
for i in range(n):
if s[i] == 'R':
rd.append(i)
else:
dd.append(i)
while rd and dd:
a, b = rd.popleft(), dd.popleft()
if a < b:
rd.append(a + n)
else:
dd.append(b + n)
return "Radiant" if rd else "Dire"
TypeScript 代码:
function predictPartyVictory(s: string): string {
let rd: Array<number> = [], dd: Array<number> = [];
let n: number = s.length;
for (let i = 0; i < n; i++) {
if (s.charAt(i) == 'R') rd.push(i);
else dd.push(i);
}
while (rd.length != 0 && dd.length != 0) {
let a: number = rd.shift()!, b: number = dd.shift()!;
if (a < b) rd.push(a + n);
else dd.push(b + n);
}
return rd.length != 0 ? "Radiant" : "Dire";
};
-
时间复杂度:将所有成员进行分队,复杂度为 ;每个回合会有一名成员被消除,最多有 个成员,复杂度为 。整体复杂度为 -
空间复杂度:
最后
给大伙通知一下 📢 :
全网最低价 LeetCode 会员目前仍可用!!!
📅 年度会员:有效期加赠两个月!!; 季度会员:有效期加赠两周!!
🧧 年度会员:获 66.66 现金红包!!; 季度会员:获 22.22 现金红包!!
🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!
专属链接:https://leetcode.cn/premium/?promoChannel=acoier
更多详情请戳 这里 。
我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。
欢迎关注,明天见。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉
相关文章:

刚刚,百度和苹果宣布联名
百度 Apple 就在刚刚,财联社报道,百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定由百度提供这项服务,苹果预计采取 API 接口的方式计费。 苹果将…...

HTTP系列之HTTP缓存 —— 强缓存和协商缓存
文章目录 HTTP缓存强缓存协商缓存状态码区别缓存优先级如何设置强缓存和协商缓存使用场景 HTTP缓存 HTTP缓存时利用HTTP响应头将所请求的资源在浏览器进行缓存,缓存方式分两种:强缓存和协商缓存。 浏览器缓存是指将之前请求过的资源在浏览器进行缓存&am…...

代码+视频,R语言logistic回归交互项(交互作用)的可视化分析
交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技,几乎在高分的SCI中必出现,因为把人群分为亚组后再进行统计可以增强文章结果的可靠性,不仅如此,交互作用还可以使用来进行数据挖掘。在既往文章中,我们已…...

实验3 中文分词
必做题: 数据准备:academy_titles.txt为“考硕考博”板块的帖子标题,job_titles.txt为“招聘信息”板块的帖子标题,使用jieba工具对academy_titles.txt进行分词,接着去除停用词,然后统计词频,最…...

ReentrantLock 原理
(一)、非公平锁实现原理 1、加锁解锁流程 先从构造器开始看,默认为非公平锁实现 public ReentrantLock() {sync new NonfairSync(); } NonfairSync 继承自 AQS 没有竞争时 加锁流程 构造器构造,默认构造非公平锁(无竞争,第一个线程尝试…...

星云小窝项目1.0——项目介绍(一)
星云小窝项目1.0——项目介绍(一) 文章目录 前言1. 介绍页面2. 首页2.1. 游客模式2.2. 注册用户后 3. 星云笔记3.1. 星云笔记首页3.2. 星云笔记 个人中心3.2. 星云笔记 系统管理3.3. 星云笔记 文章展示3.3. 星云笔记 新建文章 4. 数据中心5. 交流评论6. …...
VR虚拟仿真在线模拟旅游专业情景
旅游专业运用VR虚拟仿真教学的教学优势主要包括: 1. 增强教学效果:VR技术能够提供身临其境的体验,使学生更容易理解和记住某些概念和理论。例如,学生可以通过虚拟旅行来了解某个国家的文化、历史和景点,这将比传统的课…...

ROS 2边学边练(3)-- 何为节点(nodes)
在接触节点这个概念之前,我们先来看看下面这张动态图,更方便我们理解一些概念和交互过程。 (相信大家的英文基础哈) 概念 如上图所示,这里面其实涉及到了三个概念(功能),分别是节点…...

MySQL的主从复制和读写分离
目录 相关知识: 1. 主从复制和读写分离 2. mysql 支持的复制类型 对比: 一. 主从复制 1. 原理和工作过程 工作过程: 注意: 中继日志(Relay Log): 2. 一些理解问题 2.1 为什么要复制 …...
C# 多态 派生类 abstract virtual new
静态多态函数重载运算符重载 动态多态abstract 和 virtual的区别定义与用途:成员实现:继承与重写:与接口的区别: 使用抽象类的好处主要体现在以下几个方面:代码重用:设计灵活性:接口定义&#x…...

【爬虫基础】第10讲 urlerror的使用及捕获异常
URLError是Python中的一个异常类,用于处理与URL相关的错误。它是urllib.error模块中的一个类。 URLError通常在以下情况下被引发: 网络连接问题:例如无法连接到服务器、超时等。URL不正确:例如无效的URL、无法解析主机名等。服务…...
绍兴越城中墙建材蒸压加气混凝土砌块使用注意事项可送塔山府山北海蕺山城南稽山迪荡灵芝东湖皋埠马山斗门鉴湖东浦孙端陶堰富盛
绍兴越城中墙建材蒸压加气混凝土砌块使用注意事项可送塔山府山北海蕺山城南稽山迪荡灵芝东湖皋埠马山斗门鉴湖东浦孙端陶堰富盛 使用蒸压加气混凝土砌块时需要注意以下事项: 选择符合国家标准的产品:选购时应查看产品质量证明书,确保产品符合…...

吴渔夫:AI技术引领游戏产业革命,小团队有大作为
AI技术的突飞猛进,游戏产业正在经历一场前所未有的变革。中国网游先锋,火石控股创始人吴渔夫,近日在接受第一财经日报的采访,对AI在游戏制作中的应用和未来趋势有着深刻的见解。 吴渔夫指出,AI技术的引入极大地降低了游…...
深入探索C++对象模型(二)
类对象占用的空间 #include "pch.h" #include <iostream> using namespace std;class A {public: };//类对象所占用的空间 int main() {//std::cout << "Hello World!\n"; A obja;int ilen = sizeof(obja); cout << ilen << endl…...

【javaWeb 第三篇】Vue快速入门
VUE vue是一套前端框架,免除原生的js的DOM操作,简化书写 基于MVVM(model-view-viewmodel)思想,实现数据的双向绑定,将编程的关注放在数据上。 什么是框架: 框架相当于一个半成品,是一…...
非root用户安装git lfs(git大文件)命令记录
背景 最近在看LLAMA2的模型,想直接从Huggingface下载模型到本地,但是却发现服务器上没有安装git lfs命令。查询了一些资料完成了非root用户安装git lfs命令的操作,特此记录。 Git LFS下载与解压 下载 Git LFS 二进制文件 访问 Git LFS 发布…...
PTA 道路管制
乌拉乌拉国有n个城市和m条道路,城市编号为1∼n。由于乌拉乌拉国每一个城市都在创城(创建文明城市),因此,城市之间的道路通行施行道路交通管制: 已知从城市ui到城市vi的道路,需要时间ti。…...

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】
大家好,我是淘小白~ 首先,感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新,此次版本更新修改增加了一些内容: 1、自定义多条指令,软件自动判断指令条数,进行输入 2、增加谷歌浏览多账号轮询…...
【WPF应用7】 基本控件-Grid 布局的详解与示例
引言 WPF(Windows Presentation Foundation)是.NET框架的一部分,它提供了一个用于创建桌面应用程序用户界面的框架。在WPF中,Grid布局是一个非常强大的布局工具,它允许开发者创建复杂的、响应迅速的用户界面布局。Grid…...
flink-connector-redis支持select查询
EN 1 项目介绍 基于bahir-flink二次开发,相对bahir调整的内容有: 1.使用Lettuce替换Jedis,同步读写改为异步读写,大幅度提升了性能 2.增加了Table/SQL API,增加select/维表join查询支持 3.增加关联查询缓存(支持增量与全量) 4…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...