数据结构与算法
阿Q咚咚咚
生活不易,唯有努力
展开
-
经典算法汇总
一. 数组相关二. 链表相关三. 字符串相关LeetCode第3题:无重复字符的最长子串LeetCode第567题:字符串的排列四. 二叉树相关原创 2021-08-23 18:38:53 · 714 阅读 · 0 评论 -
冒泡排序与快速排序(java实现)
冒泡排序:public class bubbleSort { public static void bubbleSort1(int [] a, int n){ int i, j; for(i=0; i<n; i++){//表示 n 次排序过程。 for(j=1; j<n-i; j++){ if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换原创 2021-07-08 21:48:06 · 106 阅读 · 0 评论 -
Linux使用RSA实现免密登录(原理)
参考文献Linux密钥rsa加密原理和ssh使用密钥实现免密码登录感谢作者分享!原创 2021-05-14 10:37:55 · 158 阅读 · 0 评论 -
有了二叉查找树、平衡树为啥还需要红黑树?
参考文章:有了二叉查找树、平衡树为啥还需要红黑树?漫画AVL树谢谢作者分享!原创 2021-04-26 12:04:35 · 65 阅读 · 0 评论 -
B-TREE、B+TREE、数据库索引
推荐文章:B-Tree详解SQL夯实基础(五):索引的数据结构感谢作者分享!原创 2021-04-25 12:27:31 · 60 阅读 · 0 评论 -
39--打印从1到最大的n位数
1.题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]2.解题思路class Solution { public int[] printNumbers(int n) { int end = (int)Math.pow(10,n)-1; int [] res = new int[end];原创 2020-12-23 12:32:48 · 75 阅读 · 0 评论 -
38--合并两个排序的链表
1.问题描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。实例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42.解决思路/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {原创 2020-11-19 17:27:02 · 77 阅读 · 0 评论 -
三、【Map】
主要内容Map集合教学目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使用”键找值”的方式遍历Map集合 使用”键值对”的方式遍历Map集合 能够使用HashMap存储自定义键值对的数据 能够使用HashMap编写斗地主洗牌发牌案例第一章 Map集合1.1 概述现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.uti原创 2020-10-18 19:31:44 · 114 阅读 · 0 评论 -
二、【List、Set、数据结构、Collections】
主要内容数据结构List集合Set集合Collections教学目标 能够说出List集合特点 能够说出常见的数据结构 能够说出数组结构特点 能够说出栈结构特点 能够说出队列结构特点 能够说出单向链表结构特点 能够说出Set集合的特点 能够说出哈希表的特点 使用HashSet集合存储自定义元素 能够说出可变参数的格式 能够使用集合工具类 能够使用Comparator比较器进行排序第一章 数据结构2.1 数据结构有什么用?当你用着java里面的容器类很爽的时候,原创 2020-10-18 19:31:02 · 122 阅读 · 0 评论 -
一、【Collection、泛型】
主要内容Collection集合迭代器增强for泛型教学目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合进行取元素 能够说出集合的使用细节 能够使用集合存储自定义类型 能够使用foreach循环遍历集合 能够使用泛型定义集合对象 能够理解泛型上下限 能够阐述泛型通配符的作用第一章 Collection集合1.1 集合概述在前面基础班我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢?集合:集合是jav原创 2020-10-18 19:30:07 · 92 阅读 · 0 评论 -
37--计算一个字符串中每个字符出现次数
1.问题描述需求:计算一个字符串中每个字符出现次数。2.解题思路获取一个字符串对象;创建一个Map集合,键代表字符,值代表次数;遍历字符串得到每个字符;判断Map中是否有该键;如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储;打印最终结果。package com.fanxindong.map;import java.util.HashMap;import java.util.Scanner;/*需求:计算一个字符串中每个字符出现原创 2020-10-18 13:49:13 · 321 阅读 · 0 评论 -
36--斐波那契数列
1. 问题描述写一个函数,输入n,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:52. 解题思原创 2020-10-15 12:38:14 · 463 阅读 · 0 评论 -
35--用两个栈实现队列
1.问题描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail原创 2020-10-14 19:38:03 · 102 阅读 · 0 评论 -
34--替换空格
1.问题描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”2.解题思路由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。1.获得 s 的长度 length2.创建字符数组 array,其长度为 length * 33.初始化 size 为 0,size 表示替换后的字符原创 2020-10-13 17:40:25 · 136 阅读 · 0 评论 -
33--二维数组中的查找
1.问题描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例: 现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定原创 2020-10-12 12:43:11 · 123 阅读 · 0 评论 -
32--数组中重复的数字
1. 问题描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 32. 解题详情由于只需要找出数组中任意一个重复的数字,因此遍历数组,遇到重复的数字即返回。为了判断一个数字是否重复遇到,使用集合存储已经遇到的数字,如果遇到的一个数字已经在集合中,则当前的数字是重复数字原创 2020-10-10 12:47:58 · 162 阅读 · 0 评论 -
31-- 二叉搜索树的范围和
文章目录1.问题描述2.代码详情1.问题描述给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:232.代码详情解题思路(递归纯遍历,通过)1.遍历所有节点,当节点的值在[L,R]之中时,加起来,否原创 2020-09-15 22:15:18 · 93 阅读 · 0 评论 -
30-- 返回倒数第 k 个节点
文章目录1.问题描述2.代码详情1.问题描述实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。输入: 1->2->3->4->5 和 k = 2输出: 42.代码详情设置快和慢两个指针,初始化时快指针比慢指针多走k-1步,然后两个指针每次都走一步,当快指针到达终点时,慢指针正好处在倒数第k的位置java:/** * Definition for singly-linked list. * public class ListNode { *原创 2020-09-07 19:56:37 · 120 阅读 · 0 评论 -
29--反转字符串
文章目录1.问题描述2.代码详情1.问题描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”原创 2020-07-28 17:49:06 · 94 阅读 · 0 评论 -
28--仅仅反转字母
文章目录1.问题描述2.代码详情1.问题描述给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。示例 1:输入:“ab-cd”输出:“dc-ba”示例 2:输入:“a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”示例 3:输入:“Test1ng-Leet=code-Q!”输出:“Qedo1ct-eeLg=ntse-T!”2.代码详情方法 :字母栈将 s 中的所有字母单独存入栈中,所以出栈等价于对字母反序操作。(原创 2020-07-28 08:58:09 · 222 阅读 · 0 评论 -
27--字符串相加
文章目录1.问题描述2.代码详情1.问题描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。2.代码详情解题思路:算法流程: 设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;计算进位: 计算 carry = tmp //原创 2020-07-22 13:29:21 · 144 阅读 · 0 评论 -
26-- 转换成小写字母
文章目录1.问题描述2.代码详情1.问题描述实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1:输入: “Hello”输出: “hello”示例 2:输入: “here”输出: “here”示例 3:输入: “LOVELY”输出: “lovely”2.代码详情java:class Solution { public String toLowerCase(String str){原创 2020-07-20 16:59:41 · 201 阅读 · 0 评论 -
25--最后一个单词的长度
文章目录1.问题描述2.代码详情1.问题描述给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: “Hello World”输出: 52.代码详情class Solution { public int lengthOfLastWord(String s) {原创 2020-07-20 12:38:23 · 86 阅读 · 0 评论 -
24--反转字符串中的单词 III
文章目录1.问题描述2. 代码详情1.问题描述给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: “Let’s take LeetCode contest”输出: “s’teL ekat edoCteeL tsetnoc”注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。2. 代码详情java:public class Solution { public String reverseWords(Strin原创 2020-07-19 11:06:45 · 105 阅读 · 0 评论 -
23--有效的括号
文章目录1.题目详情2.代码详情1.题目详情给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false2.代码详情python:class Solution(object): def原创 2020-07-17 22:58:05 · 178 阅读 · 0 评论 -
22--删除字符串中的所有相邻重复项
文章目录1. 题目要求2.代码详情1. 题目要求给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最原创 2020-07-15 12:45:03 · 602 阅读 · 0 评论 -
21--最小栈
文章目录1.问题描述2. 代码详情1.问题描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:原创 2020-07-14 12:43:27 · 132 阅读 · 0 评论 -
20--两个数组的交集
文章目录1.问题描述2.代码详情1.问题描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。2.代码详情class Solution: def set_intersection(self,set1,set2):原创 2020-07-10 13:36:47 · 116 阅读 · 0 评论 -
19--两数之和
文章目录1.题目要求2.代码详情1.题目要求2.代码详情暴力求解:class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i]+nums[j]==target:原创 2020-07-08 19:01:03 · 118 阅读 · 0 评论 -
18--两数之和 II - 输入有序数组
文章目录1.问题描述2.解题代码1.问题描述给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标原创 2020-07-08 12:48:26 · 191 阅读 · 0 评论 -
17--合并两个有序数组
文章目录1.问题描述2.代码实现1.问题描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,原创 2020-07-07 16:56:27 · 176 阅读 · 0 评论 -
16 --删除排序数组中的重复项
文章目录1.问题描述2.代码实现1.问题描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数原创 2020-07-07 12:34:01 · 96 阅读 · 0 评论 -
15--0~n-1中缺失的数字
文章目录1. 问题描述2. 解题代码1. 问题描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 100002. 解题代码class Solution: def missingNumber(self, nums原创 2020-07-06 13:29:35 · 166 阅读 · 0 评论 -
14--用两个栈实现队列
文章目录1.题目详情2.解题代码1.题目详情用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“dele原创 2020-06-30 23:30:13 · 122 阅读 · 0 评论 -
12-- 缺失的第一个正数
文章目录1.问题描述2.解题代码1.问题描述给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。2.解题代码class Solution: def firstMissingPositive(self, nums: List[int]) ->原创 2020-06-28 00:09:40 · 108 阅读 · 0 评论 -
11--移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]原创 2020-06-27 00:07:32 · 146 阅读 · 0 评论 -
数据结构与算法--10.利益最大值
1.题目亚马逊是一家纳斯达克上市的公司,通过其财务报表我们可以解读它在给定时期内的股票走势信息。这些信息包括每天交易的最高价,最低价以及开盘价。假定你作为交易员,必须在股票开盘的时候做出买入或者卖出的决定。你负责设计一个算法,根据给定的股票价格走势信息,决定买入和卖出策略,该策略保证的交易获得最大的利润2.代码(Python)S = [2,4,1,7,9,3,5,8]# 买的天数buyDay = 0# 卖的天数salDay = 0# 收益最大值Profit = 0# 买入的最小价格mi原创 2020-06-08 12:43:33 · 347 阅读 · 0 评论 -
数据结构与算法--9.常见时间复杂度及其之间的关系
文章目录1.常见时间复杂度2.常见时间复杂度之间的关系1.常见时间复杂度2.常见时间复杂度之间的关系原创 2020-06-07 15:40:57 · 251 阅读 · 0 评论 -
数据结构与算法--8.二叉树的基础知识
文章目录一. 二叉树基本概念二. 二叉树的性质三. 二叉树的代码实现四. 二叉树的遍历一. 二叉树基本概念二. 二叉树的性质三. 二叉树的代码实现四. 二叉树的遍历原创 2020-06-02 23:53:02 · 153 阅读 · 1 评论 -
数据结构与算法--7.树的基础知识
文章目录一. 树的概念二. 树的术语三. 树的种类四. 树的存储和表示五. 常见的树的应用场景一. 树的概念二. 树的术语三. 树的种类四. 树的存储和表示五. 常见的树的应用场景原创 2020-06-02 20:23:18 · 120 阅读 · 0 评论