代码随想录-力扣刷题-总结笔记01

news2024/11/18 7:43:43
  1. 代码随想录:代码随想录
  2. 力扣:力扣 (LeetCode) 全球极客挚爱的技术成长平台

 

目录

01、代码随想录

00、琐碎知识点

01、数组

02、链表

03、哈希表

04、字符串

05、双指针法

06、栈与队列

6.1、栈

6.2、队列

07、二叉树

7.1、前中后序-递归遍历

7.2、二叉树层序遍历模板

7.3、节点的定义

08、回溯算法

09、贪心算法

10、动态规划

11、单调栈

12、图论

02、低代码平台调研


01、代码随想录

00、琐碎知识点

 Arrays.asList() 是一个静态方法,用于将传入的参数转换为一个 List 对象。它的作用是将数组转换为一个固定长度的、不可变的 List,该 List 的底层实现仍然是原始数组,因此对数组或列表的修改都会影响到另一个。
这个方法通常用于将数组快速转换为 List,方便在需要 List 类型参数的方法中使用数组。例如:
String[] array = {"apple", "banana", "orange"};
List<String> list =
Arrays.asList(array);

这段代码将一个字符串数组转换为一个字符串列表。此时对数组或列表的修改都会相互影响,因为它们共享相同的数据源。但需要注意的是,由于底层实现是基于原始数组的,所以返回的 List 是一个固定长度的列表,不能进行增加或删除元素的操作,否则会抛出 UnsupportedOperationException 异常。

set1.retainAll(set2) 是一个Set集合的方法调用,用于保留两个集合中都存在的元素,即在set1中仅保留那些也存在于set2中的元素。该方法会修改调用它的set1集合,使其只包含那些同时也存在于set2中的元素,而不包含set2中不包含的元素。

举个例子,假设set1包含元素 {1, 2, 3, 4, 5},set2包含元素 {3, 4, 5, 6, 7},那么调用 set1.retainAll(set2) 后,set1将变成 {3, 4, 5},因为这些元素是同时存在于set1和set2中的。

这个方法在集合操作中经常用于求交集。

//定义翻转函数
public void reverse(char[] ch, int i, int j) {
    for (; i < j; i++, j--) {
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
    }
}

这两个方法是 Java 中常用的用于类型转换的静态方法:

  1. Integer.parseInt(String s):

    • 用于将字符串转换为整数类型。它将接受一个字符串参数,并尝试将该字符串解析为一个带符号的十进制整数。
    • 如果解析成功,它将返回相应的整数值。
    • 如果字符串不是有效的表示整数的格式,或者包含超出整数范围的字符,它将抛出 NumberFormatException 异常。
  2. String.valueOf(Object obj):

    • 将指定的对象转换为字符串表示形式。
    • 如果传入的对象为 null,则返回字符串 "null"。
    • 否则,它会调用对象的 toString() 方法来获取字符串表示形式。

这些方法在实际编程中经常用于数据类型之间的转换。例如,parseInt() 可用于将用户输入的字符串转换为整数,而 valueOf() 可用于将其他数据类型(如整数、浮点数、布尔值等)转换为字符串。

//0347
Map<Integer, Integer> map = new HashMap<>();//key:数字,value:出现到频次、
map.put(curNum, map.getOrDefault(curNum, 0) + 1);

ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList(map.entrySet());
Collections.sort(list, (a, b) -> {//根据value进行排序
    return b.getValue() - a.getValue();
});


Map<Integer, Integer> map = new HashMap<>();//key为数组元素值,val为对应出现次数
//在优先队列中存储二元组(num, cnt),cnt表示元素值num在数组中的出现次数
//出现次数按从队头到队尾的顺序是从大到小排,出现次数最多的在队头(相当于大顶堆)
PriorityQueue<int[]> pq = new PriorityQueue<>((pair1, pair2) -> pair2[1] - pair1[1]);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {//大顶堆需要对所有元素进行排序
    pq.add(new int[]{entry.getKey(), entry.getValue()});
}

01、数组

Java 数组 | 菜鸟教程

int[] array1;//声明整数数组
array1 = new int[]{1, 2, 3, 4, 5};//初始化数组

int[] array2 = new int[]{1, 2, 3, 4, 5};

int[] array3 = new int[99];

return new int[]{i, j};
for(type element: array) {
    System.out.println(element);
}
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);

02、链表

public class ListNode {
    // 结点的值
    int val;

    // 下一个结点
    ListNode next;

    // 节点的构造函数(无参)
    public ListNode() {
    }

    // 节点的构造函数(有一个参数)
    public ListNode(int val) {
        this.val = val;
    }

    // 节点的构造函数(有两个参数)
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

03、哈希表

Set<Integer> record = new HashSet<>();

map的用法

在Java中,Map是一种常用的数据结构,用于存储键值对。以下是Map接口中一些常用的方法:

  1. put(K key, V value): 将指定的键值对添加到Map中,如果键已存在,则替换对应的值。

  2. get(Object key): 返回指定键所映射的值,如果键不存在,则返回null。

  3. containsKey(Object key): 如果Map中包含指定的键,则返回true,否则返回false。

  4. containsValue(Object value): 如果Map中包含一个或多个键所映射的值等于指定值,则返回true,否则返回false。

  5. remove(Object key): 删除Map中指定键所映射的键值对,并返回该键所对应的值,如果键不存在,则返回null。

  6. keySet(): 返回Map中所有键构成的Set集合。

  7. values(): 返回Map中所有值构成的Collection集合。

  8. entrySet(): 返回Map中所有键值对构成的Set集合,每个元素都是一个Map.Entry对象,表示一个键值对。

  9. size(): 返回Map中键值对的数量。

  10. isEmpty(): 如果Map中不包含键值对,则返回true,否则返回false。

//0347
Map<Integer, Integer> map = new HashMap<>();//key:数字,value:出现到频次、
map.put(curNum, map.getOrDefault(curNum, 0) + 1);

ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList(map.entrySet());
Collections.sort(list, (a, b) -> {//根据value进行排序
    return b.getValue() - a.getValue();
});


Map<Integer, Integer> map = new HashMap<>();//key为数组元素值,val为对应出现次数
//在优先队列中存储二元组(num, cnt),cnt表示元素值num在数组中的出现次数
//出现次数按从队头到队尾的顺序是从大到小排,出现次数最多的在队头(相当于大顶堆)
PriorityQueue<int[]> pq = new PriorityQueue<>((pair1, pair2) -> pair2[1] - pair1[1]);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {//大顶堆需要对所有元素进行排序
    pq.add(new int[]{entry.getKey(), entry.getValue()});
}

04、字符串

s = s.replaceAll("\\s+", " ");//将字符串s中所有连续的空白字符替换为单个空格,从而实现将多个连续空白字符合并为一个空格的效果。
String s;
int[] record = new int[26];
for (int i = 0; i < s.length(); i++) {
    record[s.charAt(i) - 'a']++;
}
Integer.parseInt(String s);//字符串转换为整数
String.valueOf(Object obj);//将指定的对象转换为字符串表示形式。

05、双指针法

06、栈与队列

6.1、栈

Stack<String> stack = new Stack<String>();

6.2、队列

Deque<Character> deque = new LinkedList<Character>();
Deque<Character> deque = new LinkedList<>();
deque.push('a');
deque.pop();
deque.peek();
deque.isEmpty();

Deque接口代表了一个双端队列(Double Ended Queue),它支持在队列两端添加、删除和检查元素。LinkedList 类实现了 Deque 接口,因此你可以使用 LinkedList 来创建一个 Deque 实例。

  1. deque.push('a'):将元素 'a' 推入双端队列的开头。

  2. deque.pop():移除并返回双端队列的第一个元素。在这种情况下,它会移除并返回队列开头的元素。

  3. deque.peek():返回双端队列的第一个元素,但不移除。这个方法允许你查看队列开头的元素,但不会对队列做出任何修改。

  4. deque.isEmpty():检查双端队列是否为空。如果队列中没有元素,则返回 true,否则返回 false

Queue<Integer> queue;//和栈中保持一样元素的队列
queue1 = new LinkedList<>();

Queue<Integer> queue = new LinkedList<>();//【用的最多】

queue.add();
queue.size();
queue.push();
queue.poll();
queue.peek();
queue.offer();
queue.isEmpty();

Queue<Integer> queue = new ArrayDeque<>();

07、二叉树

7.1、前中后序-递归遍历

// 前序遍历·递归·LC144_二叉树的前序遍历
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        preorder(root, result);
        return result;
    }

    public void preorder(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }
        result.add(root.val);
        preorder(root.left, result);
        preorder(root.right, result);
    }
}

// 中序遍历·递归·LC94_二叉树的中序遍历
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        inorder(root, res);
        return res;
    }

    void inorder(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        inorder(root.left, list);
        list.add(root.val);             // 注意这一句
        inorder(root.right, list);
    }
}

// 后序遍历·递归·LC145_二叉树的后序遍历
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        postorder(root, res);
        return res;
    }

    void postorder(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        postorder(root.left, list);
        postorder(root.right, list);
        list.add(root.val);             // 注意这一句
    }
}
//Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};

class Solution {//589.N叉树的前序遍历
    public List<Integer> preorder(Node root) {
        List<Integer> res = new ArrayList<>();
        helper(root, res);
        return res;
    }

    public void helper(Node root, List<Integer> res) {
        if (root == null) {
            return;
        }
        res.add(root.val);
        for (Node ch : root.children) {
            helper(ch, res);
        }
    }
}

7.2、二叉树层序遍历模板

队列和集合的声明:

List<List<Integer>> res = new ArrayList<>();
List<List<Integer>> res = new ArrayList<List<Integer>>();
Deque<Node> deque = new LinkedList<>();
class Solution0102 {//力扣102.二叉树的层序遍历
    public List<List<Integer>> levelOrder(TreeNode root) {
        Deque<TreeNode> deque = new LinkedList<>();
        if (root != null) {
            deque.push(root);
        }
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        while (!deque.isEmpty()) {
            int size = deque.size();
            ArrayList<Integer> tempList = new ArrayList<Integer>();
            while (size-- > 0) {//for (int i = 0; i < size; i++) {
                TreeNode treeNode = deque.poll();
                tempList.add(treeNode.val);
                if (treeNode.left != null) {
                    deque.offer(treeNode.left);
                }
                if (treeNode.right != null) {
                    deque.offer(treeNode.right);
                }
            }
            res.add(tempList);
        }
        return res;
    }
}

7.3、节点的定义

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {}

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
import java.util.List;

/**
 * 429.N叉树的层序遍历
 */
public class Node {
    public int val;
    public List<Node> children;

    public Node() {
    }

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
public class Node2 {
    public int val;
    public Node2 left;
    public Node2 right;
    public Node2 next;

    public Node2() {
    }

    public Node2(int _val) {
        val = _val;
    }

    public Node2(int _val, Node2 _left, Node2 _right, Node2 _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};

08、回溯算法

09、贪心算法

10、动态规划

11、单调栈

12、图论

02、低代码平台调研

芋道

  1. 芋道源码 —— 纯源码解析博客
  2. https://github.com/YunaiV
  3. 芋道源码 (zhijiantianya) - Gitee.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UTONMOS元宇宙游戏发展趋势是什么?

UTONMOS元宇宙游戏的发展趋势包括以下几个方面&#xff1a; 更加真实的体验&#xff1a;随着技术的进步&#xff0c;UTONMOS元宇宙游戏将提供更加逼真的视觉、听觉和触觉体验&#xff0c;让玩家更加身临其境。 社交互动&#xff1a;UTONMOS元宇宙游戏将越来越注重社交互动&am…

Premiere水墨风格婚纱照片婚礼视频模板|PR婚庆后期剪辑模板

时尚大气水墨风格婚纱照片展示&#xff0c;婚礼视频制作PR模板&#xff0c;婚庆后期剪辑模板MOGRT。 主要特点&#xff1a;高清&#xff08;19201080&#xff09;分辨率/30帧/秒&#xff0c;Premiere Pro 2022或更高版本软件&#xff0c;易于定制&#xff0c;持续时间00:50秒&a…

猫头虎分享已解决Bug || 虚拟网络问题(Virtual Network Issue):VirtualNetworkError, VNetFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈&#xff0c;IPD流程是一种高度结构化的产品开发流程&#xff0c;它集成了业界很多优秀的产品开发方法论&#xff0c;像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点&#xff0c;对全流程的IPD进行合适的裁剪…

陪诊小程序:温暖您的就医之路,让关怀触手可及

随着社会的进步和科技的发展&#xff0c;人们对于医疗健康的需求日益增长。然而&#xff0c;在繁忙的生活节奏中&#xff0c;许多人在面对就医时却面临着无人陪伴的困境。为了解决这一问题&#xff0c;陪诊小程序应运而生。 陪诊小程序是一种便捷、高效、人性化的医疗服务应用…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式&#xff1a;从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发&#xff0c;逐步深入&#xff0c;最终结合代码实战&#xff0c;带你…

【代码随想录python笔记整理】第十四课 · 链表的基础操作 2

前言:本笔记仅仅只是对内容的整理和自行消化&#xff0c;并不是完整内容&#xff0c;如有侵权&#xff0c;联系立删。 一、分析题目要求 在前面一课中&#xff0c;我们学习了链表的创建以及新元素的插入&#xff0c;并且我们学会了打印链表中的元素。这节课我们依托上节课的基础…

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版

JetBrains DataGrip 2023是一款功能强大的数据库IDE&#xff0c;专为数据库开发和管理而设计。通过DataGrip&#xff0c;您可以连接到各种关系型数据库管理系统(RDBMS)&#xff0c;并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023 软件获取 DataGrip …

2024深度学习主流框架对比

tensorFlow 是最受欢迎和广泛使用的深度学习框架之一&#xff0c;目前在github的start数为181k。 TensorFlow是一个由Google Brain团队开发的开源深度学习框架。它允许开发者创建多种机器学习模型&#xff0c;包括卷积神经网络、循环神经网络和深度神经网络等&#xff0c;该框架…

如何在服务器正确读取resources目录下的文件

1、错误代码 InputStream is new BufferedInputStream(new ClassPathResource("fonts/SourceHanSans-Normal.ttc").getInputStream());文件位置 2、正确代码 ClassPathResource classPathResource new ClassPathResource("fonts/SourceHanSans-Normal.ttc…

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流:控制流:上机:基本计算程序-给定y和m,计算y年m月有几天?-上机代码

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流&#xff1a;控制流&#xff1a;上机&#xff1a;基本计算程序-给定y和m&#xff0c;计算y年m月有几天?-上机代码 # 给定y和m&#xff0c;计算y年m月有几天? run_y_m_day { # 把闰年的每月天数存入字典 1:31, 2:29, …

导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统

随着元宇宙、VR、AR等新技术的快速发展&#xff0c;旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分&#xff0c;其形式更加多元化智能化。智能导览系统作为一种新的服务方式&#xff0c;能够为游客提供更加便捷的旅游服务和游览体验&#xff0c;也逐渐…

django运行项目NameError: name ‘_mysql‘ is not defined

Django运行项目时报错 Django运行项目时报错NameError: name ‘_mysql’ is not defined 安装的mysqlclient 是 2.1.1版本 切换成mysqlclient-2.1.0 运行&#xff0c;解决

高并发数据采集:Ebay商家信息多进程爬虫的进阶实践

背景 Ebay作为全球最大的电子商务平台之一&#xff0c;其商家信息包含丰富的市场洞察。然而&#xff0c;要高效获取这些信息&#xff0c;就需要利用先进的技术手段。本文将深入探讨如何通过并发加速技术&#xff0c;实现Ebay商家信息多进程爬虫的最佳实践方法&#xff0c;并附…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

springboot-基础-thymeleaf配置+YAML语法

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 配置thymeleafthymeleaf举例参数设置yaml基础知识YAML语法报错&#xff1a;Expecting a Mapping node but got 其他语法 spring boot不推荐使用jsp。thymeleaf是一个XML/XHTML/HTM…

算法沉淀——动态规划之回文串问题(上)(leetcode真题剖析)

算法沉淀——动态规划之回文串问题 01.回文子串02.最长回文子串03.分割回文串 IV04.分割回文串 II05.最长回文子序列06.让字符串成为回文串的最少插入次数 01.回文子串 题目链接&#xff1a;https://leetcode.cn/problems/palindromic-substrings/ 给你一个字符串 s &#xf…

SpringMVC 学习(九)之拦截器

目录 1 拦截器介绍 2 创建一个拦截器类 3 配置拦截器 1 拦截器介绍 在 SpringMVC 中&#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能&#xff1a; 权限验证&#xff1a;在请求处理之前…

python学习笔记-内置异常

概述 Python 中的异常&#xff08;Exception&#xff09;是指在程序执行过程中遇到的错误或异常情况。当程序出现异常时&#xff0c;解释器会停止当前代码的执行&#xff0c;并试图找到匹配的异常处理器来处理异常。如果没有找到合适的异常处理器&#xff0c;程序就会终止并打…

【MySQL】DCL

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1. 管理用户 在MySQL数据库中&#xff0c;DCL&#xff08;数据控制语言&#xff09;是用来管理用户和权限的语句集合。通过DCL语句&#xff0c;可以创建、修改、删…