途虎养车笔试 途虎养车笔试题 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%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务