2020.9.21每日复习
119.杨辉三角II
分析
- 创建一个List集合,创建一个索引index,表示当前处理到杨辉三角中的第几行。
- 对index进行循环,每次循环先往集合中存入一个1,之后对集合中的数据从后往前进行处理(最后一个值为1,不用处理,从倒数第二位开始处理)。集合中当前索引的值等于当前索引加上前一个索引的值,依次往前循环。
class Solution{
public List<Integer> getRow(int rowIndex){
List<Integer> res = new ArrayList<>();
int index = 0;
while(index <= rowIndex){
res.add(1);
for(int i = index - 1; i > 0; i--){
res.set(i, res.get(i) + res.get(i - 1));
}
index++;
}
return res;
}
}
1170.比较字符串最小字母出现频次
分析
- 先构造f(s)方法,计算非空字符串中最小字母出现的频次。设一个有26位的数组,对字符串每一个字符进行计数,将字符-‘a’,得到索引,并在数组中相应索引位置加1,循环完毕后,对数组进行遍历,将第一个不是0的数组值返回,即得到最小字母的频次。
- 构造一个结果数组,存放最后的结果。创建一个存放词汇表每个词汇中最小字母出现频次的次数的数组,该数组的索引为最小字母出现的频次,索引对应的数组值为出现该频次的次数,如biao[3] = 2:最小字母出现频次为3的词汇有2个。从后往前循环该数组,将后一个值加到前一个上。这是因为小于当前值时,也一定小于当前值后面的那些值,故从后往前进行累加。
- 最后循环待查表,每个字符串的最小字母频次即为biao数组中相应索引加1的数组值;如f(queries[i]) = 3 < 4,即等于biao[4]的值。
class Solution {
public int[] numSmallerByFrequency(String[] queries, String[] words) {
int[] res = new int[queries.length];
int[] biao = new int[12];
for(String word : words){
biao[f(word)]++;
}
for(int i = 10; i >= 0; i--){
biao[i] += biao[i + 1];
}
for(int i = 0; i < queries.length; i++){
res[i] = biao[f(queries[i]) + 1];
}
return res;
}
public int f(String s){
int[] arr = new int[26];
for(char c : s.toCharArray()){
arr[c - 'a']++;
}
for(int i = 0; i < 26; i++){
if(arr[i] != 0) return arr[i];
}
return -1;
}
}