7月算法训练------第二十三天(字典树)解题报告
题目类型:字典树
题目难度:困难
第一题、1032. 字符流
- 题目链接:1032. 字符流
- 思路分析:
dd在执行query()时,将字符储存进StringBuilder中,遍历StringBuilder的最后几个字符,如果有与words数组中匹配的就返回true,否则返回false。 - 代码:
class StreamChecker {
String[] words;
StringBuilder sb = new StringBuilder();
public StreamChecker(String[] words) {
this.words = words;
}
public boolean query(char letter) {
sb.append(letter);
boolean[] judge = new boolean[words.length];
for(int i = 0; i < words.length; i++){
if(words[i].length() <= sb.length()){
String s = sb.substring(sb.length() - words[i].length());
if(s.equals(words[i])){
judge[i] = true;
}
}
}
for(boolean b : judge){
if(b){
return true;
}
}
return false;
}
}
/**
* Your StreamChecker object will be instantiated and called as such:
* StreamChecker obj = new StreamChecker(words);
* boolean param_1 = obj.query(letter);
*/
剑指offer
第二题、剑指 Offer 03. 数组中重复的数字
- 题目链接:剑指 Offer 03. 数组中重复的数字
- 思路分析:
运用hash表,判断是否重复。 - 代码:
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet();
for(int i = 0; i < nums.length; i++){
if(set.contains(nums[i])){
return nums[i];
}else{
set.add(nums[i]);
}
}
return 0;
}
}
第三题、剑指 Offer 53 - I. 在排序数组中查找数字 I
- 题目链接:剑指 Offer 53 - I. 在排序数组中查找数字 I
- 思路分析:
这一题在7月9日的文章中就写过了。现在用另一种方法。
代码:
class Solution {
public int search(int[] nums, int target) {
int count = 0;
for(int num : nums){
if(num == target){
count++;
}
}
return count;
}
}
第四题、剑指 Offer 53 - II. 0~n-1中缺失的数字
- 题目链接:剑指 Offer 53 - II. 0~n-1中缺失的数字
- 思路分析:
遍历整个数组,如果有数组值与下表值不相等时,则返回该下标值。 - 代码:
class Solution {
public int missingNumber(int[] nums) {
for(int i = 0; i < nums.length; i++){
if(i != nums[i]){
return i;
}
}
return nums[nums.length-1]+1;
}
}