java学习day6 + leetcode31 下一个排列

 1.消息队列和一些功能

P74 P75 P76基于stream的消息队列

单消费模式

消费者组

java学习day6 + leetcode31 下一个排列_第1张图片

P77基于消息队列的异步秒杀下单

shift 2 提及,插入已知笔记

P78 探店笔记

P79查看探店笔记

p80点赞功能

一人一赞 这里也有并发

P81 点赞排行榜

sortedset set集合的选择

redis里面的zset

mybatis改sql排序语句

p82 好友关注

关注和取关

p83 共同关注

redis里的set交集功能

解析id集合没看懂

P84推拉feed流

java学习day6 + leetcode31 下一个排列_第2张图片

2.leetcode 31 下一个排列

这里用到了 列表、hashset、数组和整数转换、回溯法全排列,比较全面的一道题


public class Solution {

    public void nextPermutation(int[] nums) {
        // 1. 将当前数组拼成一个整数 value
        int value = 0;
        for (int num : nums) {
            value = value * 10 + num;
        }

        // 2. 生成所有全排列,并将每个排列拼接为整数
        Set result = new HashSet<>();
        boolean[] used = new boolean[nums.length];
        backtrack(nums, new ArrayList<>(), used, result);

        // 3. 将结果转为数组并排序
        List 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 path, boolean[] used, Set 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;
        }
    }}

好好看下数据结构,慢慢自己写代码,然后把思路变成全部代码

你可能感兴趣的:(java,学习,算法)