刚刚,百度和苹果宣布联名

news2024/11/16 22:54:37

百度 × Apple

就在刚刚,财联社报道,百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。

苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定由百度提供这项服务,苹果预计采取 API 接口的方式计费。

苹果将国行 iPhone 等设备采用国产大模型 AI 功能主要出于合规需求,因为苹果自身短期内还无法解决合规问题,但国外版 iPhone 等设备 AI 功能均来自苹果自己的大模型。

不是黑百度(我们要正视客观差距),相信大多数国行用户心理多少有点不是滋味,国产苹果味 🤣

为什么说大多数,而不是所有国行用户,剩下的小部分是什么人。

是持有「百度」股票的国行用户:

alt

蹭上了果链,百度盘中上涨 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 中的 RadiantDire 分别存入有序集合 rsds 当中,然后从前往后模拟消除过程,过程中使用 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 位置找到下一个决策者,总是需要遍历那些已被消除的位置,而该无效遍历操作可使用「循环队列」优化。

优化

使用循环队列 rddd 来取代有序集合 rsds。起始将各个成员分类依次入队,每次从两队列队头中取出成员,假设从 rs 中取出成员下标为 a,从 dd 中取出成员下标为 b,对两者进行比较:

  • 若有 a < b,说明 a 先行权,且其消除对象为 ba 行权后需等到下一轮,对其进行大小为 的偏移后重新添加到 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

更多详情请戳 这里 。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

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

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

相关文章

HelpLook AI ChatBot:自定义Prompts综合指南

AI问答机器人&#xff08;AI Chatbot&#xff09;日益在各行业普及&#xff0c;但回答准确率的不足仍是其面临的痛点。用户在与AI问答机器人的互动中常发现&#xff0c;机器人难以完全理解和准确回答复杂问题。HelpLook可以通过自定义提示词&#xff08;Prompts&#xff09;和集…

基于springboot+vue+Mysql的酒店管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Calico配置路由反射器 (RR) 模式

RR介绍 在 Calico 网络中&#xff0c;默认使用 Node-to-Node Mesh 全互联模式&#xff0c;即集群中的每个节点之间都会相互建立 BGP 连接&#xff0c;用于路由交换。然而&#xff0c;随着集群规模的扩大&#xff0c;全互联模式会导致连接数成倍增加&#xff0c;产生性能问题。为…

【爬虫基础】第6讲 opener的使用

在爬虫中&#xff0c;opener是一个用来发送HTTP请求的对象。它可以用来模拟浏览器发送请求&#xff0c;包括设置请求头、处理Cookie等操作。使用opener可以实现一些高级功能&#xff0c;如模拟登录、处理验证码等。 方法1&#xff1a; from urllib.request import Request,bu…

AJAX~

概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用&#xff1a; 1.与服务器进行数据交换:通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替换JSP页面了 2&#xf…

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去&#xff0c;让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的&#xff0c;今天在亮数据中看到了个【…

element表格 加滚动,监听底部实现分页加载

表格要实现滚动很简单&#xff0c;给他加一个高度即可 height"300" 然后是监听事件 mounted() {this.lazyLoading();}, methods:{lazyLoading(){let dom document.querySelector(".el-table__body-wrapper");dom.addEventListener("scroll", (…

java之jvm调优实战

我们今天是讲java虚拟机,我们刚学java的时候写过hellowWorld 我们通过javaC指令把java 文件编译成字节码文件&#xff08;class&#xff09; 最终通过我们jvm 将class文件运行在 windows和linux平台上 我们也都知道java 语言有个跨平台,对我们java程序来说我们写的一份Java代码…

发掘非结构化数据价值:AI 在文档理解领域的现状与未来

编者按&#xff1a; 在当今这个由数据主导的时代&#xff0c;我们被海量多样的信息所环绕&#xff0c;但大部分数据都以非结构化的形式存在&#xff0c;诸如文档、电子邮件、合同等&#xff0c;这使得从中提取有价值的信息成为一大挑战。 幸运的是&#xff0c;AI 领域正在悄然孕…

负荷频率控制LFC,自抗扰ADRC控制,麻雀SSA算法优化自抗扰参数,两区域二次调频simulink/matlab

红色曲线为优化结果&#xff0c;蓝色曲线为没有自抗扰和没有优化的结果&#xff01;

JWT认证原理

简介&#xff1a; JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally …

用户下单、订单支付

一、用户下单 1.1 需求分析和设计 1.2 代码开发 1.2.1 Controller层 import com.sky.dto.OrdersSubmitDTO; import com.sky.result.Result; import com.sky.service.OrderService; import com.sky.vo.OrderSubmitVO; import io.swagger.annotations.Api; import io.swagger.a…

友商健康巡检分析

1、腾讯云 健康检查的参考资料&#xff1a;​​cloud.tencent.com​​ 检查的项目&#xff08;参数说明&#xff09; 检查类别 检查项 检查内容 资源状态 kube-apiserver 的状态 检测组件是否正在运行&#xff0c;如果组件以 Pod 形式运行&#xff0c;则检测其24小时内是…

《系统架构设计师教程(第2版)》第7章-系统架构设计基础知识-05-特定领域软件体系结构(DSSA)

文章目录 1. DSSA的定义1.1 概述1.2 DSSA 的必备特征如下 2. DSSA的基本活动2.1 领域分析2.2 领域设计2.3 领域实现 3. 参与DSSA的人员3.1 领域专家3.2 领域分析人员3.3 领域设计人员3.4 领域实现人员 4. DSSA的建立过程4.1 定义领域范围4.2 定义领域特定的元素4.3 定义领域特定…

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中&#xff0c;数据是通过很多计算机或者通信设备相互转发&#xff0c;才能够到达目的地,所以在这个转发的过程中&#xff0c;如果通信包…

安静:内向性格的竞争力 - 三余书屋 3ysw.net

精读文稿 这期我们介绍的这本书叫做《安静》&#xff0c;副标题是《内向性格的竞争力》。本书共有267页&#xff0c;我会用大约25分钟的时间为你讲述书中的精髓。内向性格具备什么样的竞争力&#xff1f;内向性格的人在人际交往和日常生活中似乎总是吃亏&#xff0c;因为他们不…

c语言知识点整理------基础c语言框架,数据类型,变量常量,注释

前言 本文不涉及讲解原理&#xff0c;用简洁明了的风格&#xff0c;去整理方便查阅的知识点。 &#xff08;适合有编程基础&#xff0c;或者需要作为笔记的人群使用&#xff09; 程序基本框架 结果会输出hello world。 程序的执行 c语言属于编译型语言。 代码执行分为五个…

python学习13:python中的字符串格式化

python中的字符串格式化另外一种方式 我们前面是使用的%d,%f,%s占位符来实现字符串的格式化的&#xff1b;这次我们通过f"{}"来快速实现格式化&#xff0c;代码示例如下&#xff1a;

计算机网络(二)物理层

物理层 一、通信基础1.奈氏准则、香农定理2.编码与调制3.电路交换、报文交换、分组交换 二、 传输介质、设备1.导向性传输介质&#xff1a;1.1双绞线1.2 同轴电缆1.3光纤 2.非导向性传输介质&#xff1a; 一、通信基础 信道带宽&#xff1a;信道能通过的最高频率和最低频率之差…

管理阿里云服务器ECS -- 网站选型和搭建

小云&#xff1a;我已经学会了如何登录云服务器ECS了&#xff0c;但是要如何搭建网站呢&#xff1f; 老王&#xff1a;目前有很多的个人网站系统软件&#xff0c;其中 WordPress 是使用非常广泛的一款&#xff0c;而且也可以把 WordPress 当作一个内容管理系统&#xff08;CMS…