求字典序的最大子序
解题思路:
例如一个字符串asdfghj,首先需要遍历一遍字符串,找到字典排序最大的s,
然后接下来遍历dfghj,找到最大的j。此时j是最后一个字符,
搜索结束,字典排序最大的子字符串即为sj
。
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String s=in.next();
char[] array=s.toCharArray();
int maxPos=0;//记录最大的字符所在的位置
StringBuffer sb=new StringBuffer();
while(maxPos<array.length){
char maxValue=(char) Integer.MIN_VALUE;//记录本次遍历得到的最大字符
for(int i=maxPos;i<array.length;i++){
if(array[i]>maxValue){
maxValue=array[i];
maxPos=i;
}
}
sb.append(maxValue);
maxPos++;
}
System.out.println(sb.toString());
}
作者:早就戒了。
链接:https://www.nowcoder.com/discuss/76116
来源:牛客网
链接:https://www.nowcoder.com/discuss/76116
来源:牛客网
第二题:三个整数
思路:贪心,首先对三个数进行排序。从小到大为xyz,
①如果xy之间差距为偶数,通过对x+2就使得xy相等,然后,对xy分别+1,使得xyz相等。
②如果 xy之间为奇数,那么就通过对xy分别+1,使得y=z,此时如果x和Z之间差距为偶数,那么就对x加2,使得XYZ相等
③如果x和Z之间差距为奇数,那么就x加2,使得X比zy都大1,然后对yz分别加1,使xyz相等 。
假设为2 5 8,那么由②可以变为 5 8 8,然后根据③,变化为 9 8 8,然后变化为 9 9 9。
public static void main(String[] args) { Scanner in=new Scanner(System.in); int[] array=new int[3]; for(int i=0;i<3;i++){ array[i]=in.nextInt(); } Arrays.sort(array); int x=array[0]; int y=array[1]; int z=array[2]; if((y-x)%2==0){ System.out.println((y-x)/2+z-y); }else{ int a1=z-y; int a2=z-x-a1;//x使用了1,1以后和z的差值 if(a2%2==0){//x和Z之间差距为偶数,那么就对x加2,使得XYZ相等 System.out.println(a1+a2/2); }else{//x和Z之间差距为奇数,那么就x加2,使得X比zy都大1,然后对yz分别加1,使xyz相等 。 System.out.println(a1+a2/2+2); } } }