数据结构与算法
文章平均质量分 54
数据结构与算法
Shansec~
前端领域新星创作者,专注于前端各领域技术,共同学习共同进步,一起加油!
展开
-
leeCode14_最长公共前缀
一、题目内容编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = ["flower","flow","flight"] 输出:"fl"示例 2:输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成二、解题思原创 2021-01-21 13:44:33 · 158 阅读 · 3 评论 -
leeCode350_两个数组的交集
一、题目内容给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?原创 2021-01-21 13:37:02 · 170 阅读 · 3 评论 -
leeCode122_买股票的最佳时机 II
一、题目内容给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4] 输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股原创 2021-01-21 13:59:26 · 210 阅读 · 3 评论 -
几种常见排序算法和搜索算法
前言最近为了巩固一下自己的算法基础,又把算法书里的基本算法刷了一遍, 特地总结一下前端工程师需要了解的排序算法和搜索算法知识,虽然还有很多高深算法需要了解, 但是基础还是要好好巩固一下的.本文将以图文的形式为大家介绍如下算法知识,希望在读完之后大家能有所收获:冒泡排序及其优化选择排序插入排序归并排序快速排序顺序搜索二分搜索正文我想对于每个前端工程师来说, 最头疼的就是算法问...原创 2020-04-22 15:45:24 · 1176 阅读 · 3 评论 -
八种排序算法原理及Java实现
概述排序算法分为内部排序和外部排序,内部排序把数据记录放在内存中进行排序,而外部排序因排序的数据量大,内存不能一次容纳全部的排序记录,所以在排序过程中需要访问外存。...原创 2020-04-23 08:13:56 · 237 阅读 · 3 评论 -
一文搞懂数组结构
几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。数组通常情况下用于存储一系列同一种数据类型的值。但在JavaScript里,也可以在数组中保存不同类型的值。但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力)。一. 数组的基本使用事实上, 如果你之前已经学习了JavaScript的基础知识, 那么数组这部分可以直接跳过.因为在基础知识中, 是要求我们灵活使用数组的, 所以大部分人应该对这部分没有问题, 但是这里我还是花费一些篇章来带着大家一起学习一下数组.因为数.原创 2021-02-05 21:16:59 · 917 阅读 · 0 评论 -
leeCode344_反转字符串
一、题目内容编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]原创 2021-01-28 21:01:02 · 222 阅读 · 7 评论 -
leeCode438_找到字符串中所有字母异位词
一、题目内容给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释: 起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。起始索引等于 6 的子串是 "bac", 它是 "abc"原创 2021-01-27 12:05:43 · 1271 阅读 · 14 评论 -
leeCode905_按奇偶排序数组
一、题目内容给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例1:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。二、题目分析这道题,按照插入排序的思想,很容易可以想到题解。我们只需要遍历数组,当我们遇到偶数时,其插入到数组前最近的一个为奇数的位置,与该位置的奇数元素交换。为了达成该目的,我们引入一个指针 j,来维持这样一原创 2021-01-27 11:41:25 · 181 阅读 · 3 评论 -
leeCode136_只出现一次的数字
一、题目内容给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4二、题目分析直接分析,我们要找只出现一次的数字,并且已知了其他的数字都只出现了两次。那么这种一听其就应该想到需使用位运算来进行求解。最好的,就是在读完题目的瞬间,直接条件反射!(当然,如你现在第一反应是想到 通过遍历统原创 2021-01-27 11:31:52 · 336 阅读 · 3 评论 -
leeCode191_位1的个数
一、题目内容编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1’的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表有符号整数 -3。进阶:如果多次调用这个函数,你将如何优化你的原创 2021-01-27 11:14:45 · 174 阅读 · 3 评论 -
leeCode231_2的幂
一、题目内容给定一个整数,编写一个函数来判断他是否为2的幂次方。示例1:输入:1输出:true解释:2的0次方为1示例2:输入:16输出:true解释:2的4次方为16示例1:输入:218输出:false二、题目分析这道题是通过位运算来进行求解的非常典型的题目。当然,其他的题解也有很多:比如暴力求解,又或者是不停除以2通过递归的方式求解,等等。但是并不是今天我想说的。先观察一些是2的幂的二进制数:可以发现这些数,都是最高位为1,其他位为0。所以我们把问题转化为“判断原创 2021-01-26 21:12:12 · 165 阅读 · 3 评论 -
leeCode69_x的平方根
一、题目内容实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。示例1:输入:4输出:2示例2:输入:8输出:2说明:8的平方根是2.82842…由于返回类型是整数,小数部分将被舍去。二、题目分析使用二分法来完成平方根还是比较容易被想到的,在有限的“区间”中,每次通过筛选一半的元素,到最终只剩下一个数(收敛),这个数就是题目要求的取整的平方根整数。根据之前说过的二分法模板,要使用二分法,原创 2021-01-26 20:55:34 · 175 阅读 · 3 评论 -
leeCode66_加一
一、题目内容给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。示例3:输入:digits = [0] 输出:[1]提示:1 <=原创 2021-01-23 16:14:57 · 176 阅读 · 3 评论 -
leeCode189_旋转数组
一、题目内容给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例1:输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]。原创 2021-01-23 16:02:30 · 117 阅读 · 3 评论 -
栈和队列判断回文数
#include <stdlib.h>#include "stdio.h"#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define true 1#define false -1typedef char ElemType;typedef int bool ;typedef struct Node...原创 2020-04-23 06:39:43 · 1102 阅读 · 3 评论 -
数据结构之串代码实现
一 、串的概念字符串简称串,是一种特殊的线性表,它的数据元素仅由一个字符组成。二 、串的定义串(String)是由零个或多个字符组成的有限序列,又称字符串。其中s是串名,用双引号括起来的字符序列为串值,但引号本身并不属于串的内容。ai(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号;n为串的长度,表示串中所包含的字符个数。三 、串...原创 2020-04-09 21:58:37 · 2449 阅读 · 4 评论 -
数据结构队列顺序存储代码实现(C语言)
队列是先入先出的,即先入队的数据先出队下面程序是队列的顺序存储结构的实现,具有入队,出队,求队列长度的的功能程序开头#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100#define Ok 1#define ERROR 0typedef int QElemType;typedef int ...原创 2020-04-09 21:39:59 · 1730 阅读 · 3 评论 -
数据结构队列的代码实现
队列是先入先出的,即先入队的数据先出队下面程序是队列的链式存储结构的实现,具有入队,出队,销毁队列的的功能程序开头部分#include <stdio.h>#include <stdlib.h>#define Ok 1#define ERROR 0typedef int QElemType;typedef int Status;typedef st...原创 2020-04-09 21:31:28 · 2884 阅读 · 4 评论 -
数据结构栈的代码实现(C语言)
一 、栈的顺序代码实现初始化一个空栈bool InitStack(SqStack *s) { s->base = (ElemType *) malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(s->base == NULL) { return false; } s->top = s-...原创 2020-04-08 21:26:38 · 4287 阅读 · 3 评论 -
线性表的代码实现(C语言)
一 、线性表顺序结构实现初始化一个空的线性表int InitList(SqList *L){ L->elem = (ElemType *) malloc(list_init_size * sizeof(ElemType)); if (!L->elem) { exit(OVERFLOW); } L->length = 0; ...原创 2020-04-08 21:02:44 · 5493 阅读 · 4 评论 -
二叉树的建立与遍历
1:二叉树节点的定义struct Node { int data; struct Node *pleft; struct Node *pright; }Node;2:二叉树创建一个节点的函数,返回值是指向该节点的指针struct Node *createnode(int value) { struct Node *pnode = (struct...原创 2020-04-07 12:27:51 · 506 阅读 · 3 评论