1854. 人口最多的年份【简单题】
思路:
- 题目限制年份范围最大101年,定义int类型数组cnt用来统计这101年里每一年存活的人的数量。
- 遍历logs数组中每个人,遍历从出生年份到死亡年份的前一年,每一年都自增1,表示这一年多了一个人活着。
- 遍历结束之后现在的cnt就是每一个年份存活的人口数量,cnt的下标和年份相差1950。
- 定义max表示最大人口,ans表示人口最多的年份,初值均为0,遍历cnt,如果cnt[i]比max大,就将max更新为cnt[i],并将ans更新为当前I+1950。
- 返回ans即可。
代码:
class Solution {
public int maximumPopulation(int[][] logs) {
int[] cnt = new int[101];
for (int[] man : logs){
for (int i = man[0]-1950; i < man[1]-1950; i++) {
cnt[i]++;
}
}
int max = 0,ans = 0;
for (int i = 0; i < 101; i++) {
if (cnt[i]>max){
ans = i+1950;
max = cnt[i];
}
}
return ans;
}
}
1859. 将句子排序【简单题】
思路:
- 主要思路就是将标注好顺序的单词给找出来,并按照给出的顺序给添加到可变字符串中,最后将这个可变字符串给转成String类型返回。
- 具体实现:
- 定义可变字符串sb用来存储排好顺序的单词,定义Integar,String类型哈希map来存储单词的序号和单词。
- 遍历s中每个字符,如果是数字则将这个数字和数字前的这个单词给存进map中,单词的提取是通过substring(start,i)来操作,start为单词的起始位置,i为当前遍历到的字符,因为句子的格式有严格限制,每个单词用1个空格隔开,且单词的最后一位是数字,因此每次提取完单词将start+2即可更新下一个单词的起始位置。
- 最后遍历map中每个key,按从小到大的顺序将单词依次添加进sb中,记得用空格隔开,最后sb结尾多加了一个空格,记得在转为String类型之后调用一下trim()函数去掉末尾的空格。
代码:
class Solution {
public String sortSentence(String s) {
StringBuilder sb = new StringBuilder();
Map<Integer,String> map = new HashMap<>();
int start = 0,len = s.length(),i = 0;
while (i<len){
int cha = s.charAt(i)-'0';
if (cha>0 && cha<=9){
map.put(cha,s.substring(start,i));
start = i+2;
}
i++;
}
int size = map.size();
for (int j = 1; j <= size; j++) {
sb.append(map.get(j));
sb.append(" ");
}
return sb.toString().trim();
}
}