算法
zhangm2020
这个作者很懒,什么都没留下…
展开
-
斐波那契数列&青蛙跳台阶
青蛙跳台阶思路,找出数列的规律记忆化递归,时间复杂度O(n),空间复杂度O(n)class Solution { Map<Integer, Integer> map = new HashMap<>(); public int numWays(int n) { if(n == 0 || n == 1){ return 1; } Integer val = map.get(n);原创 2021-08-06 15:21:00 · 79 阅读 · 0 评论 -
获取质数分页
从[101,200]中找出质数,每页存储10个质数,返回第二页数据思路:使用Map集合存储,get,put效率均为O(1)。页数判断public List<Integer> getPrimePage(){ Map<Integer, List<Integer>> result = new HashMap<>(); int startNumber = 101; int endNumber = 200; int pageSi原创 2021-07-19 20:28:23 · 52 阅读 · 0 评论 -
leetcode:雪糕的最大数量
雪糕的最大数量商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。注意:Tony 可以按任意顺序购买雪糕,每个雪糕只能买一次。示例 1:输入:costs = [1,3,2,4,1], coins = 7输出:..原创 2021-05-18 17:34:12 · 283 阅读 · 0 评论 -
有效的括号+重复的子字符串
1. 有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1: 输入: "()"输出: true思路:利用栈数据结构,先push,后来的字符匹配,匹配成功pop,匹配失败push,最终栈为空返回true注意的点:奇数必定不匹配;栈peek比较时,要注意栈是否为空class Solution { p.原创 2020-08-18 10:34:11 · 263 阅读 · 0 评论 -
Leetcode:回文数+最长回文子串+回文子串
目录1. 回文数2. 最长回文子串1. 回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false,解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false,解释: 从右向左...原创 2020-01-15 16:23:09 · 262 阅读 · 0 评论 -
LeetCode:两数之和+两数相加+字符串相乘+无重复字符的最长字串+寻找两个数组的中位数+Z字形变换+整数反转+字符串转换整数(atoi)
目录1. 两数之和2. 两数相加3. 无重复字符的最长字串4. 寻找两个数组的中位数5. Z字形变换6. 整数反转7. 字符串转换整数(atoi)1. 两数之和给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。...原创 2019-12-31 15:52:49 · 587 阅读 · 0 评论 -
七大算法之归并排序
归并排序:前提:假如两个数组有序,合并两个有序数组就是有序的思路:与快排相同的分治思想数组中只有一个元素,该数组就是有序的,数组中没有元素,该数组就是有序的。将大数组切成一个个有序的小数组时间复杂度:平均:O(NlgN)最好:O(NlgN)最坏:O(NlgN)空间复杂度:O(N)稳定性:稳定排序实现代码:public static void...原创 2018-08-20 21:21:13 · 138 阅读 · 0 评论 -
七大排序算法之堆排、选择
选择排序思想:循环一次找到一个最小值(最大值),缩小排序一个长度。时间复杂度:平均:O(N^2)最好:O(N^2)最坏:O(N^2)空间复杂度:O(1)稳定性:不稳定排序实现代码:public static void selectSort(int[] arr) { // 每次找出一个最小值 for (int i = 0; i < arr.length...原创 2018-08-17 20:15:27 · 275 阅读 · 0 评论 -
二叉树算法
1、二叉树镜像先交换根节点的左右孩子,再对其左右孩子镜像//递归实现public class Solution { public void Mirror(TreeNode root) { if(root == null){ return; } if(root.left == null && ...原创 2018-08-17 18:38:11 · 224 阅读 · 0 评论 -
七大排序算法之快排、冒泡
冒泡排序思想:循环n次,交换左右两侧数据,外层每循环一次可以把无序中最大的(最小)的元素放到无序的最后面时间复杂度:平均:O(N^2)(一共循环:f(n) = (n-1)+(n-2)+...+2+1 = n*(n-1)/2 次) O(f(n)) = n^2(只留f(n)的最高项,并且去掉最高项的系数)最好:O(N)(优化冒泡排序:排序数列本身就有序的情况...原创 2018-08-17 15:24:54 · 498 阅读 · 0 评论 -
七大排序算法之希尔、插入
插入排序在大概率有序的或者元素较小(20个左右)的情况下使用;思想:将无序部分插入到有序的部分找要插入的位置:(两种方法)1、顺序查找(在大概率有序情况下)2、二分查找(无序情况下,较顺序查找较快)时间复杂度:平均:O(N^2);使用顺序查找时,最好的情况为O(N);最坏:O(N^2)空间复杂度:O(1)稳定性:稳定排序(稳定:不会改变相同元素的相对...原创 2018-08-17 12:17:08 · 387 阅读 · 0 评论 -
栈和队列算法
1、实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间 复杂度为O(1)方法1:使用一个栈实现,交叉栈#pragma once#include<stdio.h>#define MAX_VALUE 100typedef struct MinStack{ int array[MAX_VALUE]; int top;}MinStack;...原创 2018-07-08 15:01:57 · 317 阅读 · 0 评论 -
树的定义与操作
树: 有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似 的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。 树是递归定义的。二叉树 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加...原创 2018-07-08 13:45:15 · 235 阅读 · 0 评论 -
队列的操作实现
队列,先进先出(FIFO) 只允许在一端(队尾)进行插入操作(入队列),在另一端(对头)进行删除操作(出队列)顺序队列操作实现: 用单链表实现#pragma once#include<stdio.h>#include<assert.h>#include<windows.h>typedef int QDataType;t...原创 2018-06-30 19:58:04 · 726 阅读 · 0 评论 -
栈操作实现与应用
栈,后进先出(LIFO)只允许在一端(栈顶)进行入栈和出栈的操作,另一端为栈底使用顺序表实现顺序栈的操作实现#pragma once#include<stdio.h>#include<assert.h>#include<windows.h>#include<Windows.h>type...原创 2018-06-30 14:03:19 · 338 阅读 · 0 评论 -
链表算法实现
// 倒叙打印链表void ReversePrint(SListNode *pFirst);// 逆置链表SListNode * ReverseList(SListNode *pFirst);// 删除非尾无头链表void RemoveNodeNotTail(SListNode *pos);// 无头链表前插入void InsertNoHead(SListNode *pos, int data);...原创 2018-06-29 21:50:48 · 241 阅读 · 0 评论 -
双向带头循环链表
头结点:date无意义的一个节点头文件实现#pragma once//防止头文件重定义#include<stdio.h>#include<Windows.h>#include<assert.h>typedef int DataType;typedef struct CLinkList{ DataType data; struct CLinkL...原创 2018-06-24 16:51:12 · 196 阅读 · 0 评论 -
单链表的操作实现
实现单链表的操作函数 头文件实现:// 值类型 typedef int DataType; typedef struct SListNode { DataType data; // 值 struct ListNode *pNext; // 指向下一个结点} SListNode; 源文件实现:// 初始化 void SListInit(SListNode **ppFirst); /...原创 2018-06-17 23:39:53 · 219 阅读 · 0 评论 -
静态顺序表、动态顺序表的操作实现
代码实现顺序表的操作函数头文件实现://值类型typedef int DataType;typedef struct SeqList { DataType data; // 值 int size; // 数量} SeqList;源文件实现:// 1、初始化void SeqListInit(SeqList *pSL);// 2、尾部插入void SeqListPushBack(SeqList *...原创 2018-06-12 12:49:39 · 260 阅读 · 0 评论