<一>找数字
题目描述:
在给定的一串字符串中找出数字,并且按照升序排列。
样例输入:
“我的天1456ndeno6265”;
样例输出:
12455666
代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
List<Integer> list = new ArrayList<>();
for(int i = 0;i < str.length();i++){
char ch = str.charAt(i);
if(ch >= '0' && ch <= '9') {
list.add(Integer.valueOf(String.valueOf(ch)));
}
}
Collections.sort(list);
for(Integer inte : list) {
System.out.print(inte);
}
if(list.size() == 0) {
System.out.print(-1);
}
}
}
<二>二分查找
题目描述:给定一个有序的数组,用递归的二分查找算法找到其中的一个值,若有这个值输出它的下标,若没有则输出-1。
样例输入;
{11 15 18 19 26 54 87} 找19
样例输出:
true
代码如下:
import java.util.Scanner;
public class Main3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
String str = scanner.next();
str = str.substring(1,str.length()-1); //去掉{};
String[] split = str.split(",");
int[] arrInt = new int[split.length];
for (int i = 0; i < split.length; i++) {
arrInt[i] = Integer.valueOf(split[i]);
}
System.out.println(search(arrInt,0,arrInt.length-1,N)+1);
}
public static int search(int[] array,int start,int end,int n){
if(end==start){
return array[end]==n?end:-1;
}
int mid = (end+start)/2;
if(array[mid]>n){
int nend = mid-1;
nend = nend<0?0:nend;
return search(array,start,nend,n);
}
if(array[mid]<n){
return search(array,mid+1,end,n);
}
if(array[mid]==n){
return mid;
}
return -1;
}
}