1.字符串中找出最长数字串
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
//定义两个数组 一个暂时存储数字段 一个存储最长数字段
//最后输出ret;
String ret = "";
String cur = "";
int i = 0;
for (; i < str.length(); i++) {
char ch = str.charAt(i);
//走到数字时加入cur
if (ch >= '0' && ch <= '9') {
cur = cur + ch + "";
}else {
//走到字母段时开始判断cur与ret 是否需要置换
if (ret.length() < cur.length()){
ret =cur;
}
//清空cur
cur = "";
}
}
//走到最后若为无字母时 eg:12aa1234 进行此判断
if(i ==str.length() && ret.length() < cur.length()){
ret =cur;
}
System.out.println(ret);
}
2.数组中超过一半的数字
/**
* 数组中超过一半的数字
* 采用众数思想:如果两个数不相等,就消去这两个数
* 最坏情况下,每消去一个众数和一个非众数,那么如果存在众数,最后留下的数一定是众数
*/
public int MoreThanHalfNum_Solution(int [] array) {
//边界条件
if (array == null || array.length ==0){
return 0;
}
//初始化值 result=数组第一个 times=标志位
int result = array[0];
int times = 1;
//进行众数思想
//i从当前数组的第二个索引开始
for (int i = 1; i < array.length; ++i) {
if (times != 0){
//此时i位置与前一位相等
if(array[i] == result){
++ times;
}else{
//不相等
--times;
}
}else {
//前两个都不相等,即times = 0 ,再次初始化result值与times值 进行后续判断
result = array[i];
times = 1;
}
}
//判断是否存在众数的情况 此时times存储result的出现次数
times = 0;
for (int i = 0; i < array.length; ++i) {
if(array[i] == result ) ++times;
}
return (times > array.length/2) ? result :0;
}