讯飞场景算法(Java实现)
<一>找数字
题目描述:
在给定的一串字符串中找出数字,并且按照升序排列。
样例输入:
“我的天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; } }