算法总结
文章平均质量分 59
天上飞的云传奇
一个年轻人
展开
-
NC119 最小的K个数 && 剑指 Offer 40. 最小的k个数
不使用原生优先级队列,自己实现一个import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { int len = input.length; for(int i=(k-1)/2;i>=0;i--){ shiftDown(input,i,原创 2021-12-21 16:29:02 · 198 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构【中等】+剑指 Offer 27. 二叉树的镜像【简单】+剑指 Offer 28. 对称的二叉树【简单】
树的子结构、描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2]原创 2021-10-22 20:27:40 · 63 阅读 · 2 评论 -
剑指 Offer 09. 用两个栈实现队列 【简单】
题目:用两个栈实现队列 【简单】描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof题解:没读懂输入输出。。用ArrayList试了下。之后才原创 2021-10-15 14:32:16 · 64 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈 【简单】
问题:包含min函数的栈描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top();原创 2021-10-15 15:31:51 · 60 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制【中等】+剑指 Offer 58 - II. 左旋转字符串【简单】+剑指 Offer 05. 替换空格【简单】
左旋转字符串描述: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof这个对于String类有一个函数 substring(int start,int end) 截取start开始,en原创 2021-10-17 19:53:07 · 78 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字【简单】+ 剑指 Offer 53 - I. 在排序数组中查找数字 I 【简单】+ 剑指 Offer 53 - II. 0~n-1中缺失的数字【简单】
数组中重复的数字描述: 找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3用hash表就原创 2021-10-18 18:28:54 · 75 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表 【简单】 + 剑指 Offer 24. 反转链表【简单】
题目 从尾到头打印链表描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/题解1: 自己写的比较差 //定义一个辅助空间,将值存储进去,然后反着输出,栈 public int[] reversePrint(ListNode h原创 2021-10-16 15:26:51 · 73 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找【中等】+ 剑指 Offer 11. 旋转数组的最小数字【简单】+剑指 Offer 50. 第一个只出现一次的字符【简单】
二维数组中的查找描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5,原创 2021-10-20 17:09:07 · 93 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树【中等】+ 剑指 Offer 32 - II. 从上到下打印二叉树 II【简单】+ 剑指Offer32III. 从上到下打印二叉树 III【中等】
从上到下打印二叉树描述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof题解1: 层序遍历(广度优先搜索原创 2021-10-22 19:59:41 · 76 阅读 · 0 评论 -
LeetCode 刷题记录(每日一题)
554. 砖墙你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和应该相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量原创 2021-05-02 16:20:31 · 336 阅读 · 0 评论 -
数据结构算法 时间复杂度
数据结构是什么 是一种“存储结构” 算法是什么 是一种操作数据得一种方法,数据结构和算法相辅相成 离了数据结构 某些算法就没有用了 比如二分查找需要随机访问也就是在数组这个数据结构下操作,但是在链表下就不适用了,因为链表是不能随机访问的,数据结构只是一种数据的存在形式如果没有算法来操作数据,那么孤立存在的数据结构就是没有用的时间复杂度 概念 是算法的执行时间与数据规模的关系 怎么求就是看哪个代码执行的次数最多 而且有未知数 常数 系数 有高阶时的低阶都对时间复杂度影响较低 可以忽略不记T(n) = O.原创 2020-05-30 20:38:41 · 197 阅读 · 0 评论 -
算法总结 栈(c语言实现)(二)
栈栈可以分为 顺序栈和链栈有关栈的题 解密回文数有关栈和队列的题 扑克牌游戏顺序栈一般用top==-1表示空栈顺序栈的基本操作Typedef struct node{int top;int a[100];}S;InitStack(s)初始化:初始化一个新栈void InitStack(S *s){s->top=-1;}Empt...原创 2020-04-09 09:57:22 · 138 阅读 · 0 评论 -
算法总结 链表(c语言实现)
链表1.单链表的创建(头插),尾插2. 循环链表循环链表,它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。两个单链表无序合并为一个单链表法1,不带尾指针 ,头插法#include <stdio.h>#include <stdlib.h>typedef struct node { int m; struct node *l...原创 2020-03-29 18:03:23 · 186 阅读 · 0 评论 -
基于栈的括号匹配问题
括号匹配问题//栈在括号匹配问题中的应用,假设表达式中允许存在三种括号:方括号和圆括号和花括号,其嵌套顺序任意,即 ({}) 或 [{([][])}] 等均为正确格式,[(]) 或 ([)) 或 (()] 均为不正确格式算法思路:以 ({}) 为例,如果是左括号则入栈,第一个字符 ’ ( '入栈,然后第二个 ’ [ ’ 也入栈 。接下来的第三个字符 ’ ] ’ 就不入栈,直接和栈中的 第二...原创 2020-03-29 18:00:26 · 237 阅读 · 0 评论 -
算法总结 栈+队列(c语言实现)
栈+队列还是一道题两个人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人 手中的牌全部出完时,游戏结束,对手获胜。两个人可以当成两个队列,出牌是出队,赢牌是入队。而桌面则可当成栈,有牌则top++,人拿回牌则top–;首先创建结构体实现队和栈typedef struct node1...原创 2020-03-25 22:49:08 · 175 阅读 · 0 评论 -
算法总结 栈(c语言实现)
栈还是一道题解密回文“xyzyx”是一个回文字符串,所谓回文字符 串就是指正读反读均相同的字符序列#include <stdio.h>#include <string.h>//解密回文,回文就是正着读倒着读都一样 例如 12321 456654 上海自来水来自海上(一个汉字两个字节) main(){ char str[50],str2[25]; ...原创 2020-03-25 14:09:50 · 227 阅读 · 0 评论 -
算法总结 队列(c语言实现)
队列 总结首先是一道题,简单的算法题解密QQ号每次从前面拿两个,第 1 个扔掉,第 2 个 放到尾部。循环解密的第一步是将第一个数删除,简单的方法是将所有后面的数都往前面挪动一位,将前面的数覆盖。然后让最后一个位置的值变成移到尾部的数值,循环实现的代码,如下#include <stdio.h>main(){ int a[10],t,m; for(int i=0;i&...原创 2020-03-24 19:51:34 · 481 阅读 · 0 评论