java学习day6 + leetcode31 下一个排列
1.消息队列和一些功能
P74 P75 P76基于stream的消息队列
单消费模式
消费者组
P77基于消息队列的异步秒杀下单
shift 2 提及,插入已知笔记
P78 探店笔记
P79查看探店笔记
p80点赞功能
一人一赞 这里也有并发
P81 点赞排行榜
sortedset set集合的选择
redis里面的zset
mybatis改sql排序语句
p82 好友关注
关注和取关
p83 共同关注
redis里的set交集功能
解析id集合没看懂
P84推拉feed流
2.leetcode 31 下一个排列
这里用到了 列表、hashset、数组和整数转换、回溯法全排列,比较全面的一道题
public class Solution {public void nextPermutation(int[] nums) {// 1. 将当前数组拼成一个整数 valueint value = 0;for (int num : nums) {value = value * 10 + num;}// 2. 生成所有全排列,并将每个排列拼接为整数Set<Integer> result = new HashSet<>();boolean[] used = new boolean[nums.length];backtrack(nums, new ArrayList<>(), used, result);// 3. 将结果转为数组并排序List<Integer> sortedList = new ArrayList<>(result);Collections.sort(sortedList);// 4. 找到当前 value 的下一个排列for (int j = 0; j < sortedList.size(); j++) {if (sortedList.get(j) == value) {int nextIndex = (j == sortedList.size() - 1) ? 0 : j + 1;int nextValue = sortedList.get(nextIndex);// 5. 将下一个排列写回原数组String str = Integer.toString(nextValue);Arrays.fill(nums, 0); // 清空原数组for (int k = 0; k < str.length(); k++) {nums[k] = str.charAt(k) - '0';}break;}}}// 回溯法生成全排列private void backtrack(int[] nums, List<Integer> path, boolean[] used, Set<Integer> result) {if (path.size() == nums.length) {int number = 0;for (int digit : path) {number = number * 10 + digit;}result.add(number);return;}for (int i = 0; i < nums.length; i++) {if (used[i]) continue;used[i] = true;path.add(nums[i]);backtrack(nums, path, used, result);path.remove(path.size() - 1);used[i] = false;}}}
好好看下数据结构,慢慢自己写代码,然后把思路变成全部代码