58同城笔试(2021/10/23)
# 第一道
题目大意:输入“AAABBCCCDD”,输出A3B2C3D2;输入ABCDEF, 输出ABCDEF
```java
import java. util. HashMap ;
import java. util. Map ;
import java. util. Scanner ;
public class test {
public static void main ( String [ ] args) {
Scanner sc = new Scanner ( System . in) ;
String str = sc. nextLine ( ) ;
char [ ] chars = str. toCharArray ( ) ;
int len = chars. length;
Map < Character , Integer > map = new HashMap < > ( ) ;
for ( int i = 0 ; i < len ; i++ ) {
if ( ! map. containsKey ( chars[ i] ) ) {
map. put ( chars[ i] , 1 ) ;
} else {
map. put ( chars[ i] , map. get ( chars[ i] ) + 1 ) ;
}
}
map. entrySet ( ) . forEach ( entry -> {
System . out. print ( entry. getKey ( ) + "" + ( entry. getValue ( ) == 1 ? "" : entry. getValue ( ) ) ) ;
} ) ;
}
}
# 第二道
题目大意:类似于股票买卖最高利润(1 次买卖),但不知道为啥只通过了20 %
import java. util. Scanner ;
public class test002 {
public static void main ( String [ ] args) {
Scanner sc = new Scanner ( System . in) ;
String str = sc. nextLine ( ) ;
char [ ] chars = str. toCharArray ( ) ;
int len = chars. length;
int [ ] arr = new int [ len] ;
for ( int i = 0 ; i < len ; i++ ) {
arr[ i] = chars[ i] - '0' ;
}
int min = Integer . MAX_VALUE;
int max = 0 ;
for ( int i = 0 ; i < len ; i++ ) {
if ( arr[ i] < min) {
min = arr[ i] ;
} else if ( arr[ i] - min > max) {
max = arr[ i] - min;
}
}
System . out. println ( max) ;
}
}
# 第三道
题目大意:一个数组,输出出现指定次数的对应数字。当数字出现次数相同时,输出数字最大的。
例如:输入 arr[ 1 , 1 , 2 , 2 , 3 ] , 2 ;输出2 ;输入arr= [ 1 , 3 , 6 , 6 , 6 , 2 , 2 , 2 , 2 ] , 3 ;输出6 。
import java. util. * ;
public class test003 {
public static void main ( String [ ] args) {
Scanner sc = new Scanner ( System . in) ;
int times = sc. nextInt ( ) ;
Scanner sca = new Scanner ( System . in) ;
String str = sca. nextLine ( ) ;
char [ ] chars = str. toCharArray ( ) ;
int len = chars. length;
int [ ] arr = new int [ len] ;
for ( int i = 0 ; i < len ; i++ ) {
arr[ i] = chars[ i] - '0' ;
}
Arrays . sort ( arr) ;
Map < Integer , Integer > map = new HashMap < > ( ) ;
for ( int i = 0 ; i < len ; i++ ) {
if ( ! map. containsKey ( arr[ i] ) ) {
map. put ( arr[ i] , 1 ) ;
} else {
map. put ( arr[ i] , map. get ( arr[ i] ) + 1 ) ;
}
}
List < Integer > list = new ArrayList < > ( ) ;
map. entrySet ( ) . forEach ( entry -> {
if ( entry. getValue ( ) == times) {
list. add ( entry. getKey ( ) ) ;
}
} ) ;
int [ ] ans = new int [ list. size ( ) ] ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
ans[ i] = list. get ( i) ;
}
Arrays . sort ( ans) ;
System . out. println ( ans[ list. size ( ) - 1 ] ) ;
}
}