LeetCode 第170周赛

T1:1309. 解码字母到整数映射

解题思路:题目上重点内容就是 字符(’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();
    }
}

T2:1310. 子数组异或查询

解题思路:题目给的意思就是区间异或,比方说给出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;
    }
}

T3:1311. 获取你好友已观看的视频

解题思路:题目中大概的意思就是,从id为起点,让你找出最短距离为level的好友所观看的视频。也就是说一开始我们不需要管其他人看了哪些视频,只需要找第level层的好友,然后排序他们所看的视频即可。一个典型的BFS题,利用id为起点,用BFS遍历到第level层的好友(id),然后对他们所看的视频进行排序并输出。
代码:

import java.util.Map.Entry;
class Solution {
    public List watchedVideosByFriends(List> 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 treeMap = new TreeMap<>();
		while (!queue.isEmpty()){
			Integer poll = queue.poll();
			List 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 ans = new ArrayList<>();
		List> temp = new ArrayList>(treeMap.entrySet());
		Collections.sort(temp,new Comparator>() {
			public int compare(Entry o1, Entry o2) {
				return o1.getValue()-o2.getValue();
			}
		});

		for (Entry e: temp) {
			ans.add(e.getKey());
		}
		return ans;
    }
}

 

你可能感兴趣的:(java,LeetCode)