美团笔试8.10
第一题就是去重+排序
public class SecretKey {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Node> list = new ArrayList<>();
int n = sc.nextInt();
String ok = sc.next();
HashSet<String> set = new HashSet<>();
for(int i = 0;i<n;i++){
String str = sc.next();
if(!set.contains(str)){
list.add(new Node(str.length(),str));
}
set.add(str);
}
int sum1 = 0;
int sum2 = 0;
list.sort(Comparator.comparingInt(Node::getKey));
for(int i = 0;i<list.size();i++){
if(list.get(i).getKey()<ok.length()){
sum1++;
}else{
break;
}
}
for(int i = 0;i<list.size();i++){
if(list.get(i).getKey()<=ok.length()){
sum2++;
}else{
break;
}
}
System.out.println(sum1+1+" "+sum2);
}
}
class Node {
int key;
String value;
Node(int key,String value){
this.key = key;
this.value = value;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
第二题貌似就按题目去做就好了,最多就是计数排序?
public class DeleteArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 测试数据数量
int t = sc.nextInt();
for (int i = 0; i < t; i++) {
// 一组中元素个数
int n = sc.nextInt();
// 删除整组的花费系数
long k = sc.nextLong();
// 删除单个元素的花费
long x = sc.nextLong();
int [] nums = new int [n];
int max = nums[0];
for (int j = 0; j < n; j++) {
nums[j] = sc.nextInt();
max = Math.max(max, nums[j]);
}
int [] count = new int [max+1];
long minValue = n*x;
for (int j = n - 1; j >= 0; j--) {
count[nums[j]] = 1;
for (int k1 = 0; k1 < max; k1++) {
if (count[k1] == 0) {
long sum = j*x+k1*k;
minValue = Math.min(minValue, sum);
break;
}
}
}
System.out.println(minValue);
}
}
}
第三题直接放弃,前面有些可能有小瑕疵,后来直接在牛客上面改了 大致如此,第二题主要是开个 long ,然后注意转化,空实例等问题就行了,一开始没开 long 通过率0,开完直接通过
面经(打怪升级系列) 文章被收录于专栏
打怪升级...