C/C++教程

Leetcode每日随机2021/5/16

本文主要是介绍Leetcode每日随机2021/5/16,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一题
统计加排序
第二题
暴力dfs+去重
第三题
没做出来

代码

第一题

class Solution {
    public int[] frequencySort(int[] nums) {
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		for (int i = 0; i < nums.length; i++) {
			map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
		}
		int[][] count = new int[map.size()][2];
		int[] res = new int[nums.length];
		int idx = 0;
		for (int key : map.keySet()) {
			count[idx][0] = key;
			count[idx][1] = map.get(key);
			idx++;
		}
		Arrays.sort(count, (a, b) -> {
			if (a[1] != b[1]) {
				return a[1] - b[1];
			} else {
				return b[0] - a[0];
			}
		});
		idx = 0;
		for (int i = 0; i < count.length; i++) {
			int temp = 0;
			while (temp++ < count[i][1]) {
				res[idx++] = count[i][0];
			}
		}
		return res;
	}
}

第二题

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
	Set<String> visited = new HashSet<String>();
	Stack<Integer> stack = new Stack<Integer>();

	public List<List<Integer>> findSubsequences(int[] nums) {
		dfs(0, nums);
		return res;
	}

	private void dfs(int idx, int[] nums) {
		if (idx == nums.length) {
			if (stack.size() >= 2) {
				List<Integer> temp = new ArrayList<Integer>(stack);
				String seq = temp.stream().map(String::valueOf).collect(Collectors.joining(","));
				if (!visited.contains(seq)) {
					res.add(temp);
					visited.add(seq);
				}
			}
			return;
		}
		if (stack.isEmpty() || nums[idx] >= stack.peek()) {
			stack.push(nums[idx]);
			dfs(idx + 1, nums);
			stack.pop();
		}
		dfs(idx + 1, nums);
	}
}
这篇关于Leetcode每日随机2021/5/16的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!