文远知行---8/17 java开发笔试题

第一题  AC10%  数组越界。
package LinkCode;

import java.util.Scanner;

public class wenyuan {
	// 第1题

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		String line = "";
		while (true) {
			line = scan.nextLine();
			if (!line.endsWith(",")) {
				break;
			}
			sb.append(line.trim());
		}
		String[] strs = sb.toString().replaceAll(" ", "").split(",");
		int len=strs.length;
		int[] input = new int[len];
		for (int i = 0; i < len; i++) {
			input[i] = Integer.parseInt(strs[i]);
		}
		System.out.println(maxArea(input));
		scan.close();
	}

	public static int maxArea(int[] heights) {
		int i = 0;
		int j = heights.length - 1;
		int result = 0;
		while (i < j) {
			int area = (j - i) * Math.min(heights[i], heights[j]);
			result = Math.max(result, area);
			if (heights[i] <= heights[j]) {
				i++;
			} else {
				j--;
			}
		}
		return result;
	}
}
第二题 AC 100%
package LinkCode;

import java.util.Scanner;

public class wenyuan {
//第二题
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String string = sc.nextLine();
		int sum = sc.nextInt();
		String str = string.replaceAll(" ", "");
		String[] temp = str.split(",");
		int[] coin = new int[Integer.MAX_VALUE];
		for (int i = 0; i < temp.length; i++)
			coin[i] = Integer.parseInt(temp[i]);
		System.out.println(coinChange(coin, sum));
		sc.close();
	}

	public static int coinChange(int[] coins, int target) {
		if (target == 0)
			return 0;
		int[] dp = new int[target + 1];
		for (int i = 1; i <= target; i++) {
			dp[i] = Integer.MAX_VALUE;
			for (int temp : coins) {
				if (i >= temp && dp[i - temp] != Integer.MAX_VALUE) {
					dp[i] = Math.min(dp[i], dp[i - temp] + 1);
				}
			}
		}
		if (dp[target] < Integer.MAX_VALUE && dp[target] > 0)
			return dp[target];
		else
			return -1;
	}

}
第三题 AC 8.333% 数组越界
package LinkCode;

import java.util.Arrays;
import java.util.Scanner;

public class wenyuan {
//第3题
	public static void main(String args[]) {

		Scanner scan = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		String line = "";
		while (true) {
			line = scan.nextLine();
			if (!line.endsWith(",")) {
				break;
			}
			sb.append(line.trim());
		}
		String[] strs = sb.toString().replaceAll(" ", "").split(",");
		long[] input = new long[strs.length];
		for (int i = 0; i < strs.length; i++) {
			input[i] = Integer.parseInt(strs[i]);
		}
		System.out.println(leap(input));
		scan.close();
	}

	public static int leap(long[] arr) {
		int[] res = new int[arr.length];
		Arrays.fill(res, Integer.MAX_VALUE - 1);
		res[0] = 0;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 1; j < arr[i] + 1; j++) {
				if (i + j < arr.length) {
					res[i + j] = Math.min(res[i] + 1, res[i + j]);
				} else {
					break;
				}
			}

		}
		return res[arr.length - 1];
	}

}

总的来说。
坑一:对输入要处理,多行输入,判断终止输出是非逗号结尾,然后提取数字
坑二:输入的数据个数达到100000000。
坑三:尝试用过ArrayList来存储数据,依旧无效
#笔试题目##文远知行#
全部评论
题目本身不难,基本都是leetcode的题目。主要是输入的数据要处理。输入多行,提取里面的数字后,再做题。 比如输入数据为 1, 2,    5, 4,6 中间有多个空格,还有输入的行数不确定,所以结尾没有逗号,可以判断为输入结束 而且输入的数字个数范围为小于100000000,数字本身大小不大,小于<1000.所以没有完全AC的主要原因是数字个数太多,数组越界
1 回复 分享
发布于 2019-08-18 13:25

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
1 8 评论
分享
牛客网
牛客企业服务