IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Leetcode-第 73 场双周赛 -> 正文阅读

[数据结构与算法]Leetcode-第 73 场双周赛

第一题

题目描述

2190. 数组中紧跟 key 之后出现最频繁的数字

解题思路

直接寻找就行了

解题代码


class Solution {
    public int mostFrequent(int[] nums, int key) {
        int n = nums.length;
        int res = 0;
        int res_count=0;
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0;i<= n-2;i++){
            if (nums[i]==key){
                int k = map.getOrDefault(nums[i+1],0)+1;
                map.put(nums[i+1],k);
                if (k>res_count){
                    res_count = k;
                    res = nums[i+1];
                }
            }
        }
        return res;

    }
}

第二题

题目描述

2191. 将杂乱无章的数字排序

解题思路

要按照mapping的结果进行排序,因此,把原数字和目标数字封装对象,根据目标数字编写Comparator。

解题代码

class Solution {
    public int[] sortJumbled(int[] mapping, int[] nums) {

        ArrayList<P> list = new ArrayList<>();
        for (int n : nums) {
            StringBuilder sb = new StringBuilder();
            for (char c : String.valueOf(n).toCharArray()) {
                sb.append(mapping[c - 48]);
            }
            int tar = Integer.parseInt(sb.toString());
            list.add(new P(n, tar));

        }
        list.sort(new Comparator<P>() {
            @Override
            public int compare(P o1, P o2) {
                return o1.target - o2.target;
            }
        });

        int[] res = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            res[i] = list.get(i).src;
        }
        return res;
    }
    
}

class P {
    int src;
    int target;

    public P(int src, int target) {
        this.src = src;
        this.target = target;
    }
}

第三题

题目描述

2192. 有向无环图中一个节点的所有祖先

解题思路

?这是一个深度优先遍历,在遍历的时候,可以记录已经遍历的节点,避免重复遍历。

解题代码

class Solution {

    private final HashMap<Integer, List<Integer>> map = new HashMap<>();
    private final HashMap<Integer, List<Integer>> edg = new HashMap<>();


    public List<List<Integer>> getAncestors(int n, int[][] edges) {
        // 先把节点加入Map.
        for (int[] edge : edges) {
            int start = edge[0];
            int end = edge[1];
            List<Integer> l = edg.getOrDefault(end, new ArrayList<Integer>());
            l.add(start);
            edg.put(end, l);
        }

        List<List<Integer>> res = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            // 从 i 开始往上分析。 进行深度有限遍历
            List<Integer> list = dfs(i);
            map.put(i, list);
            res.add(list);

        }
        return res;
    }

    private List<Integer> dfs(int n) {

        if (!edg.containsKey(n)) {
            // 我是父节点
            return new ArrayList<>();
        }

        if (map.containsKey(n)) {
            // 此节点已经做过计算,可以直接返回
            return map.get(n);
        }
        // 获取当前节点的父节点
        List<Integer> fathers = edg.get(n);
        HashSet<Integer> temps = new HashSet<>();
        for (int f : fathers) {
            temps.addAll(dfs(f));
        }
        fathers.addAll(temps);

        List<Integer> res = new ArrayList<>(new HashSet<>(fathers));
        Collections.sort(res);
        map.put(n, res);

        return res;
    }
}

第四题

题目描述

2193. 得到回文串的最少操作次数

?

解题思路

本题没有做出来,看了大佬的思路,竟然是个贪心。

由于题目保证原串一定可以变成回文串,那么原串中最多只有一种字母出现奇数次。如果有一种字母出现奇数次,那么将该字母中排在最中间的字符移动到字符串中间,剩下的字符可以转化为所有字母均出现偶数次的情况。

贪心算法是:每次固定字符串最左边的字母 aa 不变,找出距离字符串右侧最近的 aa,把它交换到字符串最右边。这样字符串的头尾字母就相等了。把字符串的头尾去掉,就变成了子问题。把所有子问题的答案加起来就是最少交换次数。

作者:tsreaper
链接:https://leetcode-cn.com/problems/minimum-number-of-moves-to-make-palindrome/solution/tan-xin-zheng-ming-geng-da-shu-ju-fan-we-h57i/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解题代码

class Solution {
     
    public int minMovesToMakePalindrome(String s) {
        int n = s.length();
        if (n <= 2) {
            return 0;
        }

        char c = s.charAt(0);
        int len = 0;
        int i;
        for (i = n - 1; i >= 0; i--) {
            if (c == s.charAt(i)) {
                len = n - i - 1;
                break;
            }

        }
        String sub;
        if (i==0){
            len = len/2;
            sub = s.substring(1);
        }else {
            sub = s.substring(1, i) + s.substring(i + 1, n);
        }
        return len + minMovesToMakePalindrome(sub);
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:26:29  更:2022-03-11 22:30:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:44:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码