解题思路:题目上重点内容就是 字符(’a’ – ‘i’)分别用(’1’ – ‘9’)表示。字符(’j’ – ‘z’)分别用(’10#’ – ’26#’)表示。重点需要关注题目描述的‘#’号处于后面,所以我们可以直接从后往前遍历,当遇到‘#’时,往前取两位即可。最后就是拼接字符串了。
代码:
class Solution {
public String freqAlphabets(String s) {
StringBuilder ans = new StringBuilder();
for (int i = s.length()-1; i >= 0; i--) {
if (s.charAt(i)!='#'){
ans.append((char)('a'+s.charAt(i)-'0'-1));
}else {
int tmp = ((int)s.charAt(i-2)-'0')*10+(int)(s.charAt(i-1)-'0');
char c = (char)(tmp+'a'-1);
ans.append(c);
i--;
i--;
}
}
return ans.reverse().toString();
}
}
解题思路:题目给的意思就是区间异或,比方说给出0,3那就是将数组中第0个到第3个进行异或操作。这里我是直接用的遍历(ps:结束后蛮多人说最后一个用例会超时┓( ´∀` )┏ 然而周赛中过了。如果超时的话,可以用前缀和的思想,直接做个预处理。)
代码:
class Solution {
public int[] xorQueries(int[] arr, int[][] queries) {
int[] ans = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int t = arr[queries[i][0]];
for (int j = queries[i][0]+1; j <= queries[i][1]; j++) {
t^=arr[j];
}
ans[i]=t;
}
return ans;
}
}
解题思路:题目中大概的意思就是,从id为起点,让你找出最短距离为level的好友所观看的视频。也就是说一开始我们不需要管其他人看了哪些视频,只需要找第level层的好友,然后排序他们所看的视频即可。一个典型的BFS题,利用id为起点,用BFS遍历到第level层的好友(id),然后对他们所看的视频进行排序并输出。
代码:
import java.util.Map.Entry;
class Solution {
public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {
Queue queue = new LinkedList<>();
queue.offer(id);
int t = 0;
boolean[] vised = new boolean[friends.length];
while (level > t){
t++;
int size = queue.size();
while (size>0){
size--;
Integer pop = queue.poll();
vised[pop] = true;
for (int i = 0; i < friends[pop].length; i++) {
if (!vised[friends[pop][i]]){
vised[friends[pop][i]] = true;
queue.offer(friends[pop][i]);
}
}
}
}
Map<String,Integer> treeMap = new TreeMap<>();
while (!queue.isEmpty()){
Integer poll = queue.poll();
List<String> list1 = watchedVideos.get(poll);
for (int i = 0; i < list1.size(); i++) {
String s = list1.get(i);
if (treeMap.containsKey(s)){
treeMap.put(s,treeMap.get(s)+1);
}else {
treeMap.put(s,1);
}
}
}
List<String> ans = new ArrayList<>();
List<Entry<String, Integer>> temp = new ArrayList<Entry<String, Integer>>(treeMap.entrySet());
Collections.sort(temp,new Comparator<Entry<String,Integer>>() {
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue()-o2.getValue();
}
});
for (Entry<String, Integer> e: temp) {
ans.add(e.getKey());
}
return ans;
}
}