一.字符串中找出连续最长的数字串
题目链接:
题目描述:
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1:
输入:
abcd12345ed125ss123456789
输出:
123456789
个人思路:
遍历字符串,当遇到第一个数字时,记录它的下标为 l,然后继续向前遍历,遍历到第一个非数字时 i - l 正好为数字串长度,若数字串长度大于max,则我们更新最长数字串的start和end,更新长度max,最后输出即可。
代码实现:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
//用来记录最大数字串的初始下标和结尾下标
int start = 0;
int end = 0;
//记录最大数字串的长度
int max = 0;
//记录每次遇到第一个数字时的下标
int l = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//遇到数字则进入判断
if (c >= '0' && c <= '9') {
l = i;
//循环直到遇到非数字为止
while (i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
i++;
}
//若长度大于最大数字串长度 则更新
if (i - l > max) {
start = l;
end = i;
max = i - l;
}
}
}
System.out.println(s.substring(start, end));
}
}
二.数组中出现次数超过一半的数字
题目链接:
题目描述:
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围:n ≤ 50000,数组中元素的值 0 ≤ val ≤ 100000
要求:空间复杂度:O(1),时间复杂度 O(n)
输入描述:
保证数组输入非空,且保证有解
输出描述:
无
示例1:
输入:
[1,2,3,2,2,2,5,4,2]
输出:
2
示例2:
输入:
[3,3,3,3,2,2,2]
输出:
3
示例3:
输入:
[1]
输出:
1
个人思路:
简单模拟。
代码实现:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @return int整型
*/
public int MoreThanHalfNum_Solution (int[] numbers) {
// write code here
int num = numbers[0];
int count = 1;
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] == num) {
count++;
} else {
count--;
if (count == 0) {
num = numbers[i];
count = 1;
}
}
}
return num;
}
}