数据结构和算法
扮猪吃老虎2号
这个作者很懒,什么都没留下…
展开
-
数组及其应用
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 import java.util.ArrayList; import java.util.List; public class Solution { public void reOrderAr...原创 2019-04-21 20:30:17 · 1176 阅读 · 0 评论 -
BFS和DFS
一、前言 我们首次接触 BFS 和 DFS 时,应该是在数据结构课上讲的 “图的遍历”。还有就是刷题的时候,遍历二叉树我们会经常用到BFS和DFS。 二、区别 广度优先搜索算法(Breadth-First-Search,缩写为 BFS),是一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。 深度优先搜索算法(Depth-First-Search,缩...原创 2019-08-29 10:20:05 · 153 阅读 · 0 评论 -
HashMap的底层数据结构和源码分析
HashMap 的数据结构 HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。数组是用来确定桶的位置,利用元素的key的hash值对数组长度取模得到。链表是用来解决hash冲突问题,当出现hash值一样的情形,就在数组上的对应位置形成一条链表。 从上图中可以看出,HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个 HashMap 的时候,就会...原创 2019-08-21 15:59:32 · 402 阅读 · 0 评论 -
用HashMap求最长子串
HashMap的底层数据结构和源码分析见https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/HashMap.md 用HashMap实现滑动窗口,求一个字符串中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"...原创 2019-05-24 11:07:55 · 260 阅读 · 0 评论 -
求组合数:求n个数(1...n)中k个数的组合
如:combination(5,3) 要求输出:543,542,541,532,531,521,432,431,421,321 递归,当k等于1的时候进行输出, 当第一个数选的5,则从剩下的4321中选2个数,即combination(4,2) 第二个数选的4,则从剩下的321中选1个数,即combination(3,1),输出543,542,541 第二个数选的3,则从...原创 2019-05-21 21:28:19 · 1575 阅读 · 0 评论 -
牛客网编程题-逛公园-Java-BFS算法
又是晴朗的一天,牛牛的小伙伴们都跑来找牛牛去公园玩。但是牛牛想呆在家里看E3展,不想出去逛公园,可是牛牛又不想鸽掉他的小伙伴们,于是找来了公园的地图,发现公园是由一个边长为n的正方形构成的,公园一共有m个入口,但出口只有一个。公园内有一些湖和建筑,牛牛和他的小伙伴们肯定不能从他们中间穿过,所以只能绕行。牛牛想知道他需要走的最短距离并输出这个最短距离。 输入描述: 第一行输入一个数字n(1≤n...原创 2019-05-16 11:23:15 · 364 阅读 · 0 评论 -
A. Letter Combinations of a Phone Number
Given a string containing digits from2-9inclusive, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is giv...原创 2019-05-21 11:04:44 · 98 阅读 · 0 评论 -
顺时针矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. import java.util.ArrayList; public class Solution { ...原创 2019-04-30 19:15:41 · 306 阅读 · 0 评论 -
简单快速幂
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 普通算法:时间复杂度O(n) public class Solution { public double Power(double base, int exponent) { double res = 1; int n; ...原创 2019-04-23 21:48:45 · 64 阅读 · 0 评论 -
栈、队列
栈:先进后出;向栈中添加/删除数据时,只能从栈顶进行操作。 队列:先进先出;队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。 例题: 用两个栈实现一个队列的功能?要求给出算法和思路! <分析>: 入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。 public clas...原创 2019-04-17 17:24:40 · 75 阅读 · 0 评论 -
链表
题目描述 输入一个链表,输出该链表中倒数第k个结点。 代码思路如下:两个指针,先让第一个结点和第二个结点都指向头结点,然后再让第一个结点走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。相当于用两个节点做长度为K的一个尺子; public class Solution { public ListNode F...原创 2019-04-22 10:37:55 · 101 阅读 · 0 评论 -
数据结构的对比
数组和链表的优缺点,: 数组的内存空间是连续的,链表的内存结构是不连续的内存空间 数组: 优点:数组支持随机访问,根据下标随机访问的时间复杂度为O(1), 缺点: 1)插入、删除的时间复杂度是O(n) 2)若申请内存空间很大,比如100M,但若内存空间没有100M的连续空间时,则会申请失败,尽管内存可用空间超过100M。 ...原创 2019-09-11 09:52:08 · 309 阅读 · 0 评论