一、问题描述

一只青蛙从数组(A)的每一个元素向数组尾部跳动。跳动规则如下:

  • 当奇数跳的时候,就是第1、3、5、7....次进行移动时候,移动规则A[i] <= A[j],  并且A[j] = min(A[i+1], A[A.length-1]); 并且i < j,下同; 若A[j] = A[i]则返回最小的j索引,下同。
  • 当偶数跳的时候,就是第2、4、6、8....次进行移动的时候,移动规则A[i] >= A[j],并且A[j] = max(A[i+1], A[A.length-1])

问,能从起点跳到终点的次数有多少个?

二、思想

两种。

1、从前往后计算。

  • 每次如果能完成从前往后的计算,那么记录奇数跳和偶数跳过的位置。
  • 如果奇数跳或者偶数跳经过的地方能到达终点,则直接结果进行+1

2、从后向前计算。

  • 由于可以从任一点出发,因此更好的做法是从后向前计算。
  • 其它的整体思路和从前向后计算差不多

三、Code

从前向后计算和从后向前计算的Code都写过,但是从后向前的效果更好些。因此只贴出从后向前的代码。主要是掌握思想。

 package algorithm;

 import java.util.HashMap;
 import java.util.TreeSet;

 public class OddEvenJump {
     public int oddEvenJump(int[] A) {
         int res = 0, n = A.length;
         boolean[] odd = new boolean[n];
         boolean[] even = new boolean[n];
         odd[n - 1] = true;
         even[n - 1] = true;

         TreeSet<Integer> set = new TreeSet<>();
         HashMap<Integer, Integer> map = new HashMap<>();
         set.add(A[n - 1]);
         map.put(A[n - 1], n - 1);

         for (int i = n - 2; i >= 0; i--) {
             Integer oddJump = set.ceiling(A[i]);
             if (oddJump != null) {
                 odd[i] = even[map.get(oddJump)];
                 if (odd[i]) res++;
             }

             Integer evenJump = set.floor(A[i]);
             if (evenJump != null) {
                 even[i] = odd[map.get(evenJump)];
             }

             set.add(A[i]);
             map.put(A[i], i);
         }

         return res;
     }
 }

(9)EvenOddJump的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ASP.NET Core 之 Identity 入门(一)

    前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  6. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  7. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  8. 【.net 深呼吸】细说CodeDom(5):类型成员

    前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...

  9. 【.net 深呼吸】细说CodeDom(4):类型定义

    上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...

随机推荐

  1. centos7破解安装fisheye和Crucible

    背景介绍: Atlassian的东西相信大家都不陌生,JIRA.Confluence……虽然说这些产品都要收费,也可以申请试用: FishEye 可以方便地查看代码,而Crucible 则是进行Cod ...

  2. LOJ#2245 魔法森林

    这道题以前zbtrs大佬给我讲过.但是我只知道思想,不知道要lct维护... 这个套路很常见. 题意:给你一个无向图,每条边有a,b两个权值.求1到n号点的一条路径,路径的权值是每条边的最大a与最大b ...

  3. windows中用bat脚本更改环境变量

    机房同传了新的系统,不使用dev的话每次开机都要重新更改环境变量(其实也可以在编译命令里添加绝对路径).所以就去学习了一下用bat脚本更改path.以便每次开机可以一键更改添加环境变量 wmic en ...

  4. 利用sqlalchemy读取数据库 和pandas的Dataframe对象 互相生成

    #导入pandas import pandas as pd import numpy as np #导入SqlAlchemy from sqlalchemy import create_engine ...

  5. script id

    Script中的id还是有用的,比如如果页面需要加载的JS文件过多,那样最好是写一个JS文件用来加载这些JS文件 require: function(libraryName){ document.wr ...

  6. css之文本两端对齐

    在进行网页设计时,我们经常会看到这样的样式:文本两端对齐. css为我们提供了一个属性可以实现这样的效果:text-align: justify.不过这个只能用来设置多行文本(除最后一行).如果只有单 ...

  7. vcftools报错:Writing PLINK PED and MAP files ... Error: Could not open temporary file.解决方案

    一般来说有两种解决方案. 第一种:添加“--plink-tped”参数: 用vcftools的“--plink”参数生成plink格式文件时,小样本量测试可以正常生成plink格式,用大样本量时产生W ...

  8. Filter(过滤器)

    一.Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作. 1.Filter快速入门 1.1.步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方 ...

  9. ELK大流量日志分析系统搭建

    1.首先说下EKL到底是什么吧? ELK是Elasticsearch(相当于仓库).Logstash(相当于旷工,挖矿即采集数据).Kibana(将采集的数据展示出来)的简称,这三者是核心套件,但并非 ...

  10. (水题)P1424 小鱼的航程(改进版) 洛谷

    题目背景 原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题. 题目描述 有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x&l ...