2017年携程旅游校招Java研发笔试编程题(3个)

股票利润
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
假如一个数组中存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数)。只允许一次买入和一次卖出,请提供一个算法,计算出通过卖出和买入可以得到的最大利润


输入
价格序列,用,号隔开
输出
最大的可能利润


样例输入
2,3,2,4
样例输出

2

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextLine()) {
			String line = in.nextLine();
			String[] arry = line.split(",");
			int result = 0;
			int length = arry.length;
			for (int i = 0; i < length; i++) {
				int a = Integer.valueOf(arry[i]);
				for (int j = i + 1; j < length; j++) {
					int b = Integer.valueOf(arry[j]);
					if (b > a) {
						int c = b - a;
						if (c > result) {
							result = c;
						}
					}
				}
			}
			System.out.println(result);
		}
	}

}

二分查找
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
请写一个二分查找算法查找一个数最先出现的index,如果数不在集合中需要返回(-1)-当前数应该出现的位置。例如 [1,3,6],查找5,5应该是在index=2的位置但并不在集合中。返回(-1)-2 = -3。
输入
第一行读入一个整数x,表示要查找的数;第二行读入一个正整数n,表示待查找数组的元素个数;第三行读入n个递增整数,构成待查找的数组。
输出
整数x在数组中出现的索引位置(索引从0开始计数);如果不存在,返回(-1)-当前数应该出现的位置。


样例输入
3
5
0 1 3 5 6
样例输出
2

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextInt()) {
			int num = in.nextInt();
			int qty = in.nextInt();
			int nums[] = new int[qty];
			for (int i = 0; i < qty; i++) {
				nums[i] = in.nextInt();
			}
			System.out.println(binarySearch(nums, num));
		}
	}

	public static int binarySearch(int[] array, int desc) {
		int low = 0;
		int high = array.length - 1;
		int middle = 0;
		while (low <= high) {
			middle = (low + high) / 2;
			if (desc == array[middle]) {
				return middle;
			} else if (desc < array[middle]) {
				high = middle - 1;
			} else {
				low = middle + 1;
			}
		}
		int result = 0;
		for (int i = 0; i < array.length; i++) {
			if (array[i] < desc) {
				result++;
			}
		}
		return -1 - result;
	}

}

遍历最短路径长度
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
暴风降临的龙母丹妮莉丝·坦格利安要骑着她的龙以最快的速度游历各国,她的谋士们纷纷献策规划路线。作为她的谋士之一和仰慕者的你,决定冒险穿越到21世纪借助计算机来寻求最优路线。请设计一段程序,读取各国两两之间的距离,距离以邻接矩阵表示,并计算出遍历各国的最短路径长度。
输入
第一行:国家数量,假设为n
后续n行是国家间距离的邻接矩阵表示
输出
遍历各国的最短路径长度


样例输入
4
0,1,2,3
1,0,4,5
2,4,0,2
3,5,2,0
样例输出
5

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextLine()) {
			int num = Integer.valueOf(in.nextLine());
			int[][] nums = new int[num][num];
			for (int i = 0; i < num; i++) {
				String line = in.nextLine();
				String[] strs = line.split(",");
				for (int j = 0; j < num; j++) {
					nums[i][j] = Integer.valueOf(strs[j]);
				}
			}
			int result = 0;
			for (int i = 1; i < num; i++) {
				int a = nums[i][0];
				for (int j = 0; j < i; j++) {
					if (nums[i][j] < a) {
						a = nums[i][j];
					}
				}
				result += a;
			}
			System.out.println(result);
		}
	}
}


在线编译全部百分之百通过。不过不一定就准确。请指教。

你可能感兴趣的:(校招笔试)