目录
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
思路:贪心,先排序,然后每次都在选手中找次大值,举例说明:
代码实现:
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[3*n];
for(int i = 0; i< arr.length; i++){
arr[i] = scanner.nextInt();
}
Arrays.sort(arr);
long sum = 0;
//n组取n次
for(int i = 0; i < n; i++){
//从后往前取次大值
sum += arr[arr.length-(2*(i+1))];
}
System.out.println(sum);
}
}
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
思路一:暴力解法,写两个方法,一个用于判断是否其中字符,一个方法用来返回结果字符串
时间复杂度:O(N^2)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String judgeStr = scanner.nextLine();
//写个方法返回结果
String retStr = ret(str,judgeStr);
System.out.println(retStr);
}
public static String ret(String str,String judgeStr){
StringBuffer stringBuffer = new StringBuffer();
for(int i = 0; i < str.length(); i++){
//不相等就添加到StringBuffer,最终返回StringBuffer
if(!judge(str.charAt(i),judgeStr)){
stringBuffer.append(str.charAt(i));
}
}
String retStr = stringBuffer.toString();
return retStr;
}
//判断字符相等
public static boolean judge(char ch,String judgeStr){
for(int i = 0; i < judgeStr.length(); i++){
if(ch == judgeStr.charAt(i)){
return true;
}
}
return false;
}
}
思路二:利用HashMap将第二个字符串存储起来,value值++,接着遍历第一个字符串与hashMap去进行比较,最后用另一个字符串接收结果
时间复杂度:O(N)
在第一个for循环的时候,本来使用strJud.charAt()取字符,但是报错,最后将字符串改成数组了,但是第二个for循环里面又不报错了......idea中 charAt()方法返回值是Char
import java.util.Scanner;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
HashMap<Character,Integer> hashMap = new HashMap<>();
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String strJud = scanner.nextLine();
char[] arr = strJud.toCharArray();
//hashMap存储第二个字符串
for(int i = 0; i < arr.length; i++){
char ch = arr[i];
if(hashMap.get(ch) == null){
hashMap.put(ch,1);
}else{
int count = hashMap.get(ch) + 1;
hashMap.put(ch,count);
}
}
StringBuffer stringBuffer = new StringBuffer();
//判断,如果没有就添加到StringBuffer
for(int i = 0; i < str.length(); i++){
char ch = str.charAt(i);
if(!hashMap.containsKey(ch)){
stringBuffer.append(ch);
}
}
System.out.println(stringBuffer.toString());
}
}
思路三:也可以利用数组去接收第二个字符串对应的每一个字符,值++,和思路二一样,得开辟256个char数组空间。