最新要闻
- “暖蜂驿站”温暖“两新”群体 相城区太平街道打造“15分钟暖蜂服务圈”-每日关注
- 首发2999元 联想百应新款迷你主机上架:13代i5、机身仅0.5L 全球快消息
- 满油满电续航1370公里 加速7秒内!吉利银河L7上市:13.87万起|世界观焦点
- NVIDIA发布535.98驱动更新:大幅提升《暗黑破坏神4》帧数 每日快讯
- 当前观察:4799元开售!一图看懂努比亚Z50 Ultra摄影师版:玻璃“皮革”独一家
- 市场监管总局:CCC认证制度实施以来,儿童玩具合格率显著提升 每日关注
- 从蔚小理到理小蔚 蔚来汽车做高端砸换电能否逆袭?|今日报
- 华为凌霄子母路由Q6E正式开售:电线变网线 全屋Wi-Fi满格
- 《小美人鱼》内地票房突破2000万!累计观影人次达54.7万 全球报道
- 摩尔线程显卡支持DX11游戏!国产第一家
- 针刺只是小儿科!吉利银河L7电池遭“蹂躏”:跌落水泡火烧撞击均无碍
- 航天宏图: 公司无人机业务:业务领域覆盖国土测绘、环保监测、河道监测、电力巡检、管道巡线、灾情监测等
- 或有剧毒!印度学生午餐中现20厘米死蛇:多人进餐后呕吐昏迷 环球要闻
- 风头盖过马斯克访华 贾跃亭新车220万开卖!FF 91最全解析 世界速递
- 全球今日讯!新型太阳能电池问世:柔韧性极高 弯曲角度可超360度
- 中兴晴天墙面路由器上手:新一代WiFi 6穿墙神器
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃 而第 2、4、6... 次跳跃称为偶数跳跃 你可以按以下 当前头条
2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数
(资料图)
在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃
而第 2、4、6... 次跳跃称为偶数跳跃
你可以按以下方式从索引 i 向后跳转到索引 j(其中 i < j):
在进行奇数跳跃时(如,第 1,3,5... 次跳跃),你将会跳到索引 j
使得 A[i] <= A[j],A[j] 是可能的最小值。如果存在多个这样的索引 j
你只能跳到满足要求的最小索引 j 上。
在进行偶数跳跃时(如,第 2,4,6... 次跳跃)
你将会跳到索引 j,使得 A[i] >= A[j],A[j] 是可能的最大值
如果存在多个这样的索引 j,你只能跳到满足要求的最小索引 j 上。
(对于某些索引 i,可能无法进行合乎要求的跳跃。)
如果从某一索引开始跳跃一定次数(可能是 0 次或多次)
就可以到达数组的末尾(索引 A.length - 1)
那么该索引就会被认为是好的起始索引。
返回好的起始索引的数量。
输入:[2,3,1,1,4]。
输出:3。
答案2023-05-31:
大体步骤如下:
1.对于数组中的每个元素,使用有序表(treemap)分别找到奇数规则和偶数规则下的下一步位置。
2.奇数规则下要寻找第一个大于等于当前值的位置,而偶数规则下要寻找第一个小于等于当前值的位置。
3.使用动态规划方法,从后往前遍历数组,对于每个位置分别判断是否能够到达数组的末尾。
4.定义 dp[i][0] 表示当来到 i 位置,且在奇数规则下,最终能否到达数组末尾。同理,dp[i][1] 表示当来到 i 位置,且在偶数规则下,最终能否到达数组末尾。
5.对于每个位置 i,如果奇数规则下可以跳到下一个位置 odd[i],则 dp[i][0] = dp[odd[i]][1]。同理,如果偶数规则下可以跳到下一个位置 even[i],则 dp[i][1] = dp[even[i]][0]。
6.初始化 dp[n-1][0] 和 dp[n-1][1] 为 true,表示从数组末尾出发,无论是奇数规则还是偶数规则,都可以到达该位置。
7.遍历数组,对于每个位置 i,如果 dp[i][0] = true,则说明从该位置出发遵循奇数规则可以到达数组末尾,答案加 1。
8.返回答案。
时间复杂度:在该算法中,使用了一次 treemap 的查询操作和一次 treemap 的插入操作,这两种操作的时间复杂度均为 O(log n),对于遍历整个数组以及动态规划的过程,其时间复杂度均为 O(n),因此总的时间复杂度为 O(n log n)。
空间复杂度:算法中使用三个数组以及一个有序表。其中 odd 和 even 数组的长度为 n,dp 数组的大小为 n * 2,而有序表需要存储 n 个元素,因此算法的空间复杂度为 O(n)。
go语言完整代码如下:
package mainimport ("fmt""github.com/emirpasic/gods/maps/treemap")func oddEvenJumps(arr []int) int {n := len(arr)// 来到了i位置,如果要遵循奇数规则,应该去哪?odd[i]odd := make([]int, n)// 来到了i位置,如果要遵循偶数规则,应该去哪?even[i]even := make([]int, n)// 有序表,// key : 某个值// value : key这个值,出现的最左位置// >= key 且最小// <= key 且最大orderMap := treemap.NewWithIntComparator()for i := n - 1; i >= 0; i-- {// i位置,arr[i],奇数规则,>= arr[i]且最小的!to, to2 := orderMap.Ceiling(arr[i])if to != nil {odd[i] = to2.(int)} else {odd[i] = -1}// i位置,arr[i],偶数规则,<= arr[i]且最大的!to, to2 = orderMap.Floor(arr[i])if to != nil {even[i] = to2.(int)} else {even[i] = -1}orderMap.Put(arr[i], i)}// dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾?// dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾?dp := make([][]bool, n)for i := range dp {dp[i] = make([]bool, 2)}dp[n-1][0] = truedp[n-1][1] = trueans := 1for i := n - 2; i >= 0; i-- {// dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾// odd[i] -> 右走! -1if odd[i] != -1 {dp[i][0] = dp[odd[i]][1]}// dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾if even[i] != -1 {dp[i][1] = dp[even[i]][0]}if dp[i][0] {ans++}}return ans}func main() {arr := []int{2, 3, 1, 1, 4}result := oddEvenJumps(arr)fmt.Println(result)}
rust语言完整代码如下:
use std::collections::BTreeMap;fn odd_even_jumps(arr: Vec) -> i32 { let n = arr.len(); // 来到了i位置,如果要遵循奇数规则,应该去哪?odd[i] let mut odd = vec![0; n]; // 来到了i位置,如果要遵循偶数规则,应该去哪?even[i] let mut even = vec![0; n]; // 有序表, // key : 某个值 // value : key这个值,出现的最左位置 // >= key 且最小 // <= key 且最大 let mut order_map = BTreeMap::new(); let mut i = n as i32 - 1; while i >= 0 { // i位置,arr[i],奇数规则,>= arr[i]且最小的! if let Some((&_to, &to2)) = order_map.range(arr[i as usize]..).next() { odd[i as usize] = to2; } else { odd[i as usize] = -1; } // i位置,arr[i],偶数规则,<= arr[i]且最大的! if let Some((&_to, &to2)) = order_map.range(..=arr[i as usize]).rev().next() { even[i as usize] = to2; } else { even[i as usize] = -1; } order_map.insert(arr[i as usize], i); i -= 1; } // dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾? // dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾? let mut dp = vec![vec![false; 2]; n]; dp[n - 1][0] = true; dp[n - 1][1] = true; let mut ans = 1; let mut i = n as i32 - 2; while i >= 0 { // dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾 // odd[i] -> 右走! -1 dp[i as usize][0] = odd[i as usize] != -1 && dp[odd[i as usize] as usize][1]; // dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾 dp[i as usize][1] = even[i as usize] != -1 && dp[even[i as usize] as usize][0]; ans += if dp[i as usize][0] { 1 } else { 0 }; i -= 1; } ans}fn main() { let arr = vec![2,3,1,1,4]; let result = odd_even_jumps(arr); println!("{}", result);}
c++完整代码如下:
#include #include #include
c语言完整代码如下:
#include #include #include struct BTreeNode { int key; int value; struct BTreeNode* left; struct BTreeNode* right;};struct BTreeMap { struct BTreeNode* root;};struct BTreeNode* createNode(int key, int value) { struct BTreeNode* node = (struct BTreeNode*)malloc(sizeof(struct BTreeNode)); node->key = key; node->value = value; node->left = NULL; node->right = NULL; return node;}struct BTreeNode* insertNode(struct BTreeNode* node, int key, int value) { if (node == NULL) { return createNode(key, value); } if (key < node->key) { node->left = insertNode(node->left, key, value); } else if (key > node->key) { node->right = insertNode(node->right, key, value); } else { node->value = value; } return node;}struct BTreeNode* findCeiling(struct BTreeNode* node, int target) { if (node == NULL) { return NULL; } if (node->key == target) { return node; } if (node->key < target) { return findCeiling(node->right, target); } struct BTreeNode* leftNode = findCeiling(node->left, target); if (leftNode != NULL) { return leftNode; } return node;}struct BTreeNode* findFloor(struct BTreeNode* node, int target) { if (node == NULL) { return NULL; } if (node->key == target) { return node; } if (node->key > target) { return findFloor(node->left, target); } struct BTreeNode* rightNode = findFloor(node->right, target); if (rightNode != NULL) { return rightNode; } return node;}struct BTreeMap* createMap() { struct BTreeMap* map = (struct BTreeMap*)malloc(sizeof(struct BTreeMap)); map->root = NULL; return map;}void insert(struct BTreeMap* map, int key, int value) { map->root = insertNode(map->root, key, value);}int getCeiling(struct BTreeMap* map, int target) { struct BTreeNode* ceilingNode = findCeiling(map->root, target); if (ceilingNode == NULL) { return -1; } return ceilingNode->value;}int getFloor(struct BTreeMap* map, int target) { struct BTreeNode* floorNode = findFloor(map->root, target); if (floorNode == NULL) { return -1; } return floorNode->value;}void destroyNode(struct BTreeNode* node) { if (node == NULL) { return; } destroyNode(node->left); destroyNode(node->right); free(node);}void destroyMap(struct BTreeMap* map) { destroyNode(map->root); free(map);}int oddEvenJumps(int* arr, int arrSize) { int n = arrSize; // 来到了i位置,如果要遵循奇数规则,应该去哪?odd[i] int* odd = (int*)malloc(n * sizeof(int)); // 来到了i位置,如果要遵循偶数规则,应该去哪?even[i] int* even = (int*)malloc(n * sizeof(int)); // 有序表, // key : 某个值 // value : key这个值,出现的最左位置 // >= key 且最小 // <= key 且最大 struct BTreeMap* orderMap = createMap(); for (int i = n - 1; i >= 0; --i) { // i位置,arr[i],奇数规则,>= arr[i]且最小的! int to2 = getCeiling(orderMap, arr[i]); if (to2 == -1) { odd[i] = -1; } else { odd[i] = to2; } // i位置,arr[i],偶数规则,<= arr[i]且最大的! to2 = getFloor(orderMap, arr[i]); if (to2 == -1) { even[i] = -1; } else { even[i] = to2; } insert(orderMap, arr[i], i); } destroyMap(orderMap); // dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾? // dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾? bool** dp = (bool**)malloc(n * sizeof(bool*)); for (int i = 0; i < n; ++i) { dp[i] = (bool*)malloc(2 * sizeof(bool)); dp[i][0] = false; dp[i][1] = false; } dp[n - 1][0] = true; dp[n - 1][1] = true; int ans = 1; for (int i = n - 2; i >= 0; --i) { // dp[i][0] : 当来到i位置,且在奇数规则下,最终能不能到结尾 // odd[i] -> 右走! -1 if (odd[i] != -1) { dp[i][0] = dp[odd[i]][1]; } // dp[i][1] : 当来到i位置,且在偶数规则下,最终能不能到结尾 if (even[i] != -1) { dp[i][1] = dp[even[i]][0]; } if (dp[i][0]) { ++ans; } } // 释放内存 for (int i = 0; i < n; ++i) { free(dp[i]); } free(dp); free(odd); free(even); return ans;}int main() { int arr[] = { 2,3,1,1,4 }; int arrSize = sizeof(arr) / sizeof(int); int result = oddEvenJumps(arr, arrSize); printf("%d\n", result); return 0;}
关键词:
-
2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃 而第 2、4、6
2023-05-31:给定一个整数数组A,你可以从某一起始索引出发,跳跃一定次数在你跳跃的过程中,第1、3、5
来源: 2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃 而第 2、4、6
世界微动态丨货币市场日报:5月31日
“暖蜂驿站”温暖“两新”群体 相城区太平街道打造“15分钟暖蜂服务圈”-每日关注
首发2999元 联想百应新款迷你主机上架:13代i5、机身仅0.5L 全球快消息
满油满电续航1370公里 加速7秒内!吉利银河L7上市:13.87万起|世界观焦点
NVIDIA发布535.98驱动更新:大幅提升《暗黑破坏神4》帧数 每日快讯
当前观察:4799元开售!一图看懂努比亚Z50 Ultra摄影师版:玻璃“皮革”独一家
c#使用内存映射像处理内存一样去快速处理文件_全球热头条
重学c#系列——DiagnosticListener [三十五]|每日热门
市场监管总局:CCC认证制度实施以来,儿童玩具合格率显著提升 每日关注
从蔚小理到理小蔚 蔚来汽车做高端砸换电能否逆袭?|今日报
华为凌霄子母路由Q6E正式开售:电线变网线 全屋Wi-Fi满格
《小美人鱼》内地票房突破2000万!累计观影人次达54.7万 全球报道
摩尔线程显卡支持DX11游戏!国产第一家
针刺只是小儿科!吉利银河L7电池遭“蹂躏”:跌落水泡火烧撞击均无碍
天天热头条丨记录--Js基础练习题目
Apache DolphinScheduler 3.0.6 发布,或将是最后一个 3.0.X 版本|当前播报
债市日报:5月31日
航天宏图: 公司无人机业务:业务领域覆盖国土测绘、环保监测、河道监测、电力巡检、管道巡线、灾情监测等
或有剧毒!印度学生午餐中现20厘米死蛇:多人进餐后呕吐昏迷 环球要闻
风头盖过马斯克访华 贾跃亭新车220万开卖!FF 91最全解析 世界速递
全球今日讯!新型太阳能电池问世:柔韧性极高 弯曲角度可超360度
中兴晴天墙面路由器上手:新一代WiFi 6穿墙神器
明星餐饮为何逃不出短命魔咒?专家解释原因 全球速读
深圳电网用电负荷连续第三年突破2000万千瓦 当前热点
1499元起 OPPO K11x今晚开售:1亿像素+67W快充
全球今亮点!618最值得买的数码好物!华为家庭存储七大核心优势:比NAS好用多了
四川南充暴雨 下水道喷出1米高水柱!网友:趵突泉南充分泉
预售18:00截止!B站大会员年卡仅需88元
世界热议:手机PC秒变4TB硬盘空间!华为家庭存储图赏
理论+实操|一文掌握 RFM 模型在客户数据洞察平台内的落地实战|焦点速讯
热讯:TSN流量记录器:验证汽车网络中的以太网聚合,经济高效的解决方案
MySQL之常用数据类型
Spring MVC官方文档学习笔记(二)之DispatcherServlet
Python海龟有了新技能,这回画了个印度美女。它正在一丝不苟地给它画像,Python洪水填充fill命令用法。-微动态
天天报道:杀疯了!比亚迪新款元Pro上市:9.58万起 比预售价低4000
【环球速看料】海外版“坦克300”即将国产? 福特烈马国内路试谍照曝光!
台湾大王具足虫拉面341元一碗 学者:海蟑螂远亲 可能会中毒
日本赛马撞线后猝死:前骑手嘲讽哀悼网友“伪君子”引争议
今日要闻!苹果618大跌:iPhone 12/256GB 3499元、iPhone 14 4999元
仙佑医药科技有限公司怎么样? 仙佑集团口碑为什么这么好?
视觉盛宴:探索可视化大屏的无限魅力 世界独家
1.动态数组
TMC2160步进电机驱动芯片
简易视频直播系统的搭建实践
TF无法识别问题分析_环球观速讯
【环球聚看点】数据真空期机构情绪持稳 日债收益率多数小幅回落
世界滚动:收评:五月收官!创业板指跌超1% 英伟达概念股活跃
全球观焦点:2099元!尼康尼克尔Z DX 24mm f/1.7正式发布:夜拍画质绝
最新快讯!新掌机或将用上:高通与索尼、任天堂磋商掌机芯片
vivo S17系列发布:拍人像最好的手机 2499元起
微速讯:269元 vivo TWS Air Pro耳机发布:3D全景音频、续航长达30小时
前置5000万广角柔光!vivo S17 Pro图赏
绍兴二手车交易市场1万2万_绍兴二手车交易市场
别再满屏找日志了!推荐一款 IDEA 日志管理插件,看日志轻松多了!
docker安装redis-世界快讯
天天即时:方萍萍:黄金短期应该是要调整一下
华为最贵笔记本!MateBook X Pro微绒典藏版开卖:13999元
AI可能灭绝人类!ChatGPT之父发出警告:三巨头AI公司CEO力挺-全球快看点
【播资讯】九年造一车!贾跃亭感谢李想支持:期待来FF洛杉矶总部交流指导
两年前魅族18系列“宝刀未老”!获Flyme 10首个稳定版全量推送
女子酒驾后谎称喝了藿香正气水 结果被一招识破 环球动态
人物传记《当今奇人周兴和》七十二 春风得意马蹄急 新视野
每日资讯:基于 Web 实现 m3u8 视频播放的简单应用示例
【经验分享】锐捷EVE在火狐游览器中,取消一律打开此应用的选项,重新选择默认打开应用,如SecureCRT-动态焦点
当前讯息:淘宝太细了:mysql 和 es 的5个一致性方案,你知道吗?
世界热点!2022 Kube-OVN开源社区年度报告
天天视讯!可配置Modbus网关 嵌入式设备联网解决方案
从三岁到八十二岁的武则天(转载)---王晓磊著 之简介|每日视讯
现场视频可怕!四川一特斯拉撞飞路人致身亡:被撞者腾空而起-热门
6月1日开市!大观园早市回来啦
全球视讯!69㎡三房,72㎡四房,广州的户型都卷成这样了?
可视化探索开源项目的 contributor 关系 环球最新
蛋白质纳米“计算机”问世:未来有望治疗癌症
贾跃亭造车梦成 李想:理想很多优秀负责人都来自法拉第未来 当前信息
快看:高颜值更有强悍性能 超频可解锁200W!影驰RTX 4060 Ti星曜OC显卡评测
砸手里了!推特估值大减:只剩马斯克收购价三分之一
马斯克高调收购“看走眼”?Twitter最新估值大跌近70%_世界时快讯
火狐也将放弃旧平台:Firefox 115将是支持Win7/8.1最后版本
环球新动态:MySQL之DDL表创建及DML数据处理操作
今日视点:直播软件源码,审核的“中坚力量”鉴黄功能!
环球快消息!福星股份董秘回复:截止5月29日公司股东人数约为5.48万
仓网升级,链通全国 顺丰供应链为小米打造原料央仓
性能超苹果A17 天玑9300卷出新高度:4个X4超大核详细规格出炉
【新视野】捷克一女婴出生2天就被母亲打耳洞 妈妈:应该是不疼的
微星发布全新Z790系主板:首次支持Wi-Fi 7 及5千兆网卡 世界热消息
又稳又圆 比亚迪仰望U8原地掉头为何这么慢?比快更难实现!
肯德基麦当劳儿童节玩具断货:黄牛线上倒卖 焦点热门
猛打价格战,手术机器人市场要变天了
柏子滋心丸怎么样
稳增长政策接续发力预期升温 每日快讯
国内新一轮油价调整6月13日开启!大概率还是上涨
1599元 雷蛇战锤狂鲨专业极速版耳机发布:蓝牙、2.4GHz双模连接 焦点报道
天天新动态:《暗黑破坏神4》部分皮肤需氪金28刀 但不影响游玩
今天是世界无烟日 专家:电子烟同样有害健康 世界微头条
官方回应广东汕尾海滩突现百米生蚝带:建议尽量不要食用
JS的严格模式 天天日报
会流程图却不会UML活动图?活动图深度剖析,就怕你学不会! 世界快资讯
广西融安县市场监管局开展专项检查守护“美丽经济” 天天观点
旧了也是香饽饽!iPhone二手受追捧:保值好、iOS流畅、苹果够大牌 全球观察