虾皮笔试 虾皮笔试题 0429
笔试时间:2024年04月29日
历史笔试传送门:2023秋招笔试合集
第一题
题目
给定一个int数组nums,排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
输入描述
给定一个int数组nums,排列每个数的顺序(每个数不可拆分,比如12不能拆成1和2), 使之组成一个最大的整数。
时间限制: 1000ms
内存限制:256.0MB
输出描述
输出结果可能非常大,所以返回一个字符串而不是整数
样例输入一
[10,2]
样例输出一
"210"
样例输入二
[10,9,8]
样例输出二
"9810"
参考题解
两个数字对应的字符串a和b,如果字典序a+b>b+a,此时a排在b的前面即可获得更大值。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <vector> #include <string> #include <algorithm> // 自定义比较函数 bool cmp(const std::string &x, const std::string &y) { return x + y > y + x; } class Solution { public: std::string LargestNum(std::vector<int>& nums) { std::vector<std::string> str_nums; for (int num : nums) { str_nums.push_back(std::to_string(num)); } std::sort(str_nums.begin(), str_nums.end(), cmp); std::string result; for (const std::string &num : str_nums) { result += num; } // 删除前导零的处理,防止输出"0000"的情况 size_t pos = result.find_first_not_of('0'); if (pos != std::string::npos) { result = result.substr(pos); } else { result = "0"; } return result; } };
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Arrays; import java.util.Comparator; public class Solution { public String LargestNum(int[] nums) { String[] strNums = new String[nums.length]; for (int i = 0; i < nums.length; i++) { strNums[i] = String.valueOf(nums[i]); } Arrays.sort(strNums, new Comparator<String>() { @Override public int compare(String x, String y) { String xy = x + y; String yx = y + x; return yx.compareTo(xy); } }); StringBuilder result = new StringBuilder(); for (String num : strNums) { result.append(num); } // 删除前导零的处理,防止输出"0000"的情况 String resStr = result.toString(); if (resStr.startsWith("0")) { resSt
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。