途虎养车笔试 途虎养车笔试题 0919
笔试时间:2024年09月19日 秋招
历史笔试传送门:2023秋招笔试合集
第一题
题目
小虎在管理订单时,每个订单号都由一串字母和数字组成。为了确保订单号的有效性,需要对其进行校验。订单号的格式规定如下:订单号的长度为10位。前6位为字母,后4位为数字。字母部分必须由大写字母组成,且不能有重复字母。数字部分不能以“0”开头。你的任务是编写一个Java程序来验证输入的订单号是否符合上述要求。编写一个函数 isValidorderNunber(String orderNunber)来验证输入的订单号是否有效。如果订单号有效,返回 true。如果订单号无效,这回 false。补充说明:注意边界值处理,你不能使用Java的现有库函数来排序或直接校验字符串中的内容(例如:Set,String.contains, String.matches等)。需要通过遍历字符串,手动实现相关逻辑。
样例输入一
"ABCDEF1234"
样例输出一
true
说明:正常订单号
样例输入二
"ABCDE12345"
样例输出二
false
说明:字母部分少于6位
参考题解
遍历模拟。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <string> #include <cctype> #include <set> bool isValidLetters(const std::string& letters) { // 检查是否都是大写字母 for (char c : letters) { if (!isupper(c)) { return false; } } // 检查是否没有重复字母 for (size_t i = 0; i < letters.length(); ++i) { for (size_t j = i + 1; j < letters.length(); ++j) { if (letters[i] == letters[j]) { return false; } } } return true; } bool isValidNumbers(const std::string& numbers) { // 检查是否都是数字 for (char c : numbers) { if (!isdigit(c)) { return false; } } // 检查是否不以 '0' 开头 if (numbers[0] == '0') { return false; } return true; } bool isValidOrderNumber(const std::string& orderNumber) { if (orderNumber.length() != 10) { return false; } std::string letters = orderNumber.substr(0, 6); std::string numbers = orderNumber.substr(6); if (!isValidLetters(letters)) { return false; } if (!isValidNumbers(numbers)) { return false; } return true; }
Java:[此代码未进行大量数据的测试,仅供参考]
public class Main{ public static boolean isValidOrderNumber(String orderNumber) { if (orderNumber.length() != 10) { return false; } String letters = orderNumber.substring(0, 6); String numbers = orderNumber.substring(6); if (!isValidLetters(letters)) { return false; } if (!isValidNumbers(numbers)) { return false; } return true; } private static boolean isValidLetters(String letters) { for (char c : letters.toCharArray()) { if (!Character.isUpperCase(c)) { return false; } } for (int i = 0; i < letters.length(); i++) { for (int j = i + 1; j < letters.length(); j++) { if (letters.charAt(i) == letters.charAt(j)) { return false; } } } return true; } private static boolean isValidNumbers(String numbers) { for (char c : numbers.toCharArray()) { if (!Character.isDigit(c)) { return false; } } if (numbers.charAt(0) == '0') { return false; } return true; } }
Python:[此代码未进行大量数据的测试,仅供参考]
def is_valid_letters(letters): # 检查是否都是大写字母 if not all(c.isupper() for c in letters): return False # 检查是否没有重复字母 if len(set(letters)) != len(letters): return False return True def is_valid_numbers(numbers): # 检查是否都是数字 if not numbers.isdigit(): return False # 检查是否不以 '0' 开头 if numbers[0] == '0': return False return True def is_valid_order_number(order_number): if len(order_number) != 10: return False letters = order_number[:6] numbers = order_number[6:] if not is_valid_letters(letters): return False if not is_valid_numbers(numbers): return False return True
第二题
题目
假如你是途虎养车的产品经理,负责一个由多个项目组成的项目组合。每个项目都有一个预计的开始和结束日期,以及预计的收益。由于资源有限,你不能同时进行所有的项目,必须对它们进行规划,以确保在任何时候你只进行一个项目。给定每个项目的开始日期、结束日期和收益,你需要制定一个工作计划,以最大化总收益。你可以在完成一个项目后立即开始另一个项目。输入格式:start:一个整数数组,表示每个项目的开始日期。end: 一个整数数组,表示每个项目的结束日期。profit:一个整数数组,表示每个项目的收益。输出格式:• 一个整数,表示最大化的总收益。
样例输入
start = [1,2,3,3]
end = [3,4,5,6]
profit = [50,10,40,70]
样例输出
120
说明:我们选出第1个和第4个项目。时间范围是[1-3]+[3-6].共获得收益 120 = 50 + 70。
参考题解
动态规划。用二分加速查找过程。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <vector> #include <algorithm> struct Project { int start; int end; int profit; Project(int s, int e, int p) : start(s), end(e), profit(p) {} }; bool compare(Project a, Project b) { return a.end < b.end; } int findLastNonConflicting(const std::vector<Project>& projects, int currentIndex) { int low = 0, high = currentIndex - 1; while (low <= high) { int mid = (low + high) / 2; if (projects[mid].end <= projects[currentIndex].start) { if (mid < currentIndex -
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。