热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2018年网易秋季招聘编程挑战

探讨了一道关于整数序列操作的问题,以及如何通过特定算法解决该问题。

题目一:序列变换

题目背景
小易面对一个长度为n的整数序列a_1,...,a_n,需要执行一系列操作来生成一个新的序列b。具体操作如下:
1. 将a_i添加到b的末尾。
2. 反转b序列。
任务是计算并输出经过n次上述操作后b序列的状态。

输入说明
输入包含两行数据,首行为一个整数n(2 ≤ n ≤ 2*10^5),表示序列的长度;次行为n个整数a_i(1 ≤ a_i ≤ 10^9),表示序列a中的元素,各元素间以空格分隔。

输出说明
在一行中输出最终的b序列,各元素间以空格分隔,行末无多余空格。

解析:

输入长度n输出序列b
1a0
2a1 a0
3a2 a0 a1
4a3 a1 a0 a2
5a4 a2 a0 a1 a3
6a5 a3 a1 a0 a2 a4

从上表可以看出规律:

当n为奇数时,先输出a中所有偶数下标的元素(逆序),随后输出所有奇数下标的元素(正序)。反之,当n为偶数时,先输出所有奇数下标的元素(逆序),再输出所有偶数下标的元素(正序)。

下面是实现这一逻辑的Java代码示例:

import java.util.Scanner;
public class SequenceTransform {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int[] array = new int[n];
for (int i = 0; i array[i] = scanner.nextInt();
if (n % 2 == 0) {
for (int i = n - 1; i >= 0; i -= 2)
System.out.print(array[i] + " ");
for (int i = 0; i System.out.print(array[i] + " ");
System.out.print(array[n - 2]);
} else {
for (int i = n - 1; i >= 0; i -= 2)
System.out.print(array[i] + " ");
for (int i = 1; i System.out.print(array[i] + " ");
System.out.print(array[n - 2]);
}
System.out.println();
}
}
}

题目二:生存天数计算

题目背景
小易拥有f个水果和d元钱,每天需要消费x元租金和1个水果。市场上的水果价格为p元/个。请计算小易最多能维持多少天。

import java.util.Scanner;
public class SurvivalDays {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int fruits = scanner.nextInt();
int mOney= scanner.nextInt();
int rent = scanner.nextInt();
int fruitPrice = scanner.nextInt();
if (money / rent <= fruits)
System.out.println(money / rent);
else
System.out.println((money - fruits * rent) / (rent + fruitPrice) + fruits);
}
}
}

题目三:疯狂队列的最大差值

题目背景
给定一个数组,通过任意排列数组元素,使所有相邻两个元素之间的差值之和达到最大。求解这个最大差值,即所谓的“疯狂值”。

输入说明
输入分为两行,第一行为一个整数n(1 ≤ n ≤ 50),表示数组的大小;第二行为n个整数h[i](1 ≤ h[i] ≤ 1000),表示数组的具体数值。

输出说明
例如,对于输入序列5 10 25 40 25,若队列排列为25-10-40-5-25,则身高差绝对值的总和为15+30+35+20=100,这即为可能的最大疯狂值。

import java.util.Arrays;
import java.util.Scanner;
public class MaxCrazyValue {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int[] heights = new int[n];
for (int i = 0; i heights[i] = scanner.nextInt();
Arrays.sort(heights);
int result = 0, altResult = 0;
int mid = n / 2;
if (n % 2 == 0) {
for (int i = 0; i result += 2 * (heights[mid + i] - heights[i]);
result += heights[mid - 1] - heights[mid];
System.out.println(result);
} else {
for (int i = 0; i result += 2 * (heights[mid + 1 + i] - heights[i]);
altResult += 2 * (heights[mid + 1 + i] - heights[i]);
}
result += heights[mid - 1] - heights[mid];
altResult += heights[mid] - heights[mid + 1];
System.out.println(Math.max(result, altResult));
}
}
}
}

推荐阅读
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 深入理解Java类加载机制
    本文详细探讨了Java虚拟机(JVM)中类加载器的工作原理,特别是如何通过类的全限定名从外部源获取二进制字节流,以及不同类型的类加载器及其在双亲委派模型中的角色。 ... [详细]
  • NIO 通道接口详解
    本文介绍了NIO(New Input/Output)中的通道接口及其相关概念,包括通道的基本功能、接口设计以及各类通道接口的具体用途。通过本文,读者可以深入了解NIO通道的设计原理及其在实际项目中的应用。 ... [详细]
  • 深入解析JVM:类加载子系统详解
    本文旨在深入探讨Java虚拟机(JVM)中的类加载子系统,包括其基本结构、类加载器的工作原理、类的加载过程以及双亲委派机制。通过对这些关键点的详细分析,帮助读者更好地理解和掌握JVM的核心机制。 ... [详细]
  • 本文详细介绍了如何通过修改Lua源码或使用动态链接库(DLL)的方式实现Lua与C++之间的高级交互,包括如何编译Lua源码、添加自定义API以及在C++中加载和调用Lua脚本。 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文详细探讨了函数与对象方法的主要区别,包括它们的定义方式、调用规则以及在面向对象编程语言中的应用特点。 ... [详细]
  • 本文详细解析了muduo库中的Socket封装及字节序转换功能。主要涉及`Endian.h`和`SocketsOps.h`两个头文件,以及`Socket.h`和`InetAddress.h`类的实现。 ... [详细]
  • 如何在Java中使用ArrayList存储基本数据类型
    本文探讨了在Java编程语言中,如何利用ArrayList存储基本数据类型的方法。由于ArrayList本身仅支持存储对象类型,因此需要将基本数据类型转换为其对应的包装类形式进行存储。 ... [详细]
  • 目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • 本文探讨了在使用Java进行网络文件下载过程中遇到的问题,特别是图片下载不完整的情况,并提供了改进的方法以确保文件能够完整无误地被下载。 ... [详细]
  • 使用Bootstrap创建响应式渐变固定头部导航栏的方法
    本文详细介绍了如何利用Bootstrap框架构建一个具有渐变效果的固定顶部响应式导航栏,包括HTML结构、CSS样式以及JavaScript交互的完整实现过程。适合前端开发者和学习者参考。 ... [详细]
  • 本问题涉及对一个非负整数数组执行加一操作。数组以最高位数字在前的方式存储,每个数组元素仅包含一位数字。假设该整数没有前导零,除非该整数为0。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
author-avatar
babe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有