数据结构和算法
LeetCode算法题记录
悲雨叹风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法总结(三):直接插入排序
定义将一个记录插入到已经排序好的有序序列中。动图演示图片来源:https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715java代码附带详细说明/** * 直接插入排序 */public class SimpleInsert { public static void main(String[] args) { int[] arr = {1,5,9,6,4,2,5,2,6};原创 2021-03-26 19:15:23 · 331 阅读 · 0 评论 -
排序算法总结(二):直接选择排序
定义递增排序:第一步:从n个数据中找到最小值放在数据开头。第二步:从剩下n-1个数据中继续寻找最小值...直到全部找完。动态演示图片来源:https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715java代码/** * 直接选择排序 */public class SimpleSelect { public static void main(String[] args) {原创 2021-03-26 19:01:41 · 211 阅读 · 0 评论 -
排序算法总结(一):冒泡排序
定义冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。来源于百度百科动图演示图片来源:https://www.to原创 2021-03-26 18:52:15 · 243 阅读 · 0 评论 -
数据结构学习(图):邻接链表实现无向图
废话不多说,上代码:package com.finn.algorithm.graph;import java.util.LinkedList;import java.util.Queue;/** * 图存储结构 * 邻接链表实现无向图 */public class ListUDG { //边的数据结构 private class ENode { int adjvex;//数组下标 ENode next; //下一个节点 }原创 2021-01-13 13:43:19 · 628 阅读 · 0 评论 -
深入理解HashMap
1.对get,put方法进行详细分析Java中HashMap底层实现原理(JDK1.8)源码分析2.优秀博主https://monkeysayhi.github.io/2017/08/26/HashMap%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/3.HashMap defaultLoadFactor = 0.75和泊松分布没有关系...原创 2021-01-12 14:03:44 · 123 阅读 · 0 评论 -
LeetCode(236):二叉树的最近公共祖先
LeetCode(236):二叉树的最近公共祖先题目题解目前为了训练递归思想,树的题解都使用递归实现。/**此题目前是我遇到到,最考验递归思想掌握程度的题目。条件结束语句的判断。如何分解为子问题,都是非常值得思考的。*/class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null){原创 2020-12-04 08:17:16 · 120 阅读 · 0 评论 -
LeetCode(257):二叉树的所有路径
LeetCode(257):二叉树的所有路径题目描述目前处理二叉树的问题,多在进行二叉树的深度优先遍历和广度优先遍历。看到这个题目的第一瞬间,想到的就是深度优先遍历。从根节点走到叶子节点。题解深度优先遍历(递归实现)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN原创 2020-12-01 19:06:22 · 145 阅读 · 0 评论 -
LeetCode(226):翻转二叉树
LeetCode(226):翻转二叉树开头最近一直再刷树方面的题目,希望尽早掌握!题意题解一、层次遍历,从上向下翻转/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {原创 2020-11-30 18:55:53 · 142 阅读 · 0 评论 -
LeetCode(12):整数转罗马数字
LeetCode(12):整数转罗马数字介绍题解一class Solution { /** 对罗马数字也没深入研究过。理所当然的认为,需要一位一位的判断。 **/ public String intToRoman(int num) { HashMap<Integer,String> hm = new HashMap<>(); hm.put(1000,"M"); hm.put(900,"CM"); hm.put(500,"D"原创 2020-11-21 10:18:24 · 147 阅读 · 0 评论 -
字符串得模式匹配算法:BF,KMP,BM以及Sunday算法
字符串得模式匹配操作:BF,KMP,BM以及Sunday算法文章目录字符串得模式匹配操作:BF,KMP,BM以及Sunday算法介绍模式匹配BF算法KMP算法BM算法SunDay算法介绍模式匹配模式串(字符串),要在另一个主串中查找是否存在与模式串相等的子串(主串中任意连续字符组成的子序列)BF算法最简单最暴力KMP算法值得深入研究得算法。其中next数组的求值是理解kmp算法的关键。public class KMP { /** * * @param原创 2020-11-18 18:53:44 · 555 阅读 · 0 评论 -
LeetCode(203):移除链表元素
LeetCode(203):移除链表元素问题描述:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5题解一:使用头指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2020-11-11 21:14:40 · 198 阅读 · 0 评论 -
LeetCode(160):相交链表
LeetCode(160):相交链表题目介绍编写一个程序,找到两个单链表相交的起始节点。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4原创 2020-11-10 20:19:34 · 244 阅读 · 0 评论 -
LeetCode(67):二进制求和
LeetCode(67):二进制求和题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0” ,就都不含前导零。题解一:class原创 2020-11-05 19:42:01 · 136 阅读 · 0 评论 -
LeetCode(66):加一
LeetCode(66):加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。题解:class Solution { public int[] plusOne(i原创 2020-11-04 21:39:04 · 142 阅读 · 0 评论 -
LeetCode(53):最大子序和
LeetCode(53):最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。题解一:贪心算法class Solution { // 贪心算法 public int maxSubArray(int[] nums) { if(nums == null || nums.lengt原创 2020-11-03 20:32:45 · 167 阅读 · 0 评论 -
LeetCode(38):外观数列
LeetCode(38):外观数列给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一原创 2020-11-03 09:10:18 · 342 阅读 · 0 评论 -
LeetCode: 实现 strStr() (28)
LeetCode: 实现 strStr() (28)给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1代码:class Solution { public int原创 2020-10-21 19:42:44 · 176 阅读 · 0 评论 -
【数据结构】树(二叉树)JAVA实现
数据结构—树(二叉树)一、二叉树的数据结构/** * 二叉树节点数据结构 * @param <E> */public class TNode<E> { private E data; private TNode<E> lChild; private TNode<E> rChild; public TNode() { } public TNode(E data) { this.data原创 2020-10-12 20:34:38 · 274 阅读 · 0 评论 -
LeetCode 回文数(9)
LeetCode 回文数(9)我是只菜菜鸟,有大佬路过希望指点一二题目要求判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true首先要考虑的是临界问题:负数肯定不是会问数(-!=【0-9】);尾数为0的也不可以(120)所以先有判断 if(x<0||(x%10==0&&x!=0))然后再进行方法的选择,转为字符串肯定是首选,关于字符串的反转是比较简单的甚至可以直接用StringB原创 2020-07-02 18:54:39 · 171 阅读 · 0 评论 -
LeetCode整数反转(7)
LeetCode整数反转(7)我是只菜菜鸟,有大佬路过希望指点一二题目要求给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例:输入: 123输出: 321整数反转本身并没有什么难度,对于本人来说难度在于int类型反转溢出问题。先给出int类型最大最小值:2147483647,-2147483648**我竟然不知道负数取余还是负数最开始解法使用long类型(代码如下):class Solution { public int reverse(int x)原创 2020-07-02 09:50:02 · 221 阅读 · 0 评论
分享