数据结构和算法
tangyaya8
这个作者很懒,什么都没留下…
展开
-
排序算法(一)之冒泡排序
BubbleSort冒泡排序,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 时间复杂度o(n)²package com.tangbaobao.sort;import org.junit.Test;import java.util.Arrays;/** * 快速原创 2018-02-04 22:33:12 · 115 阅读 · 0 评论 -
剑指offer算法(一)
在有序二维数组中查找一个数是否存在一个二维数组,从上到下依次递增,从左到右依次递增,,给出一个key,在数组中查找是否存在,存在则返回该数字,否则返回-1package com.tangbaobao.offer;import org.junit.Test;/** * 二维数组的查找 * * @author 唐学俊 * @create 2018/03/28 **/p...原创 2018-03-28 17:41:52 · 368 阅读 · 0 评论 -
剑指offer算法(二)
将两个有序的数组合并成一个有序的数组在通常情况下,我们会开辟一个新的数组,然后比较两个数组的数字,然后将小的依次放入其中,这样做时间复杂度没有太大,但是空间复杂度大了初始化arr1数组,长度大于arr1和arr2长度之和,然后从后向前依次比较,从arr2中找出一个大于arr1的数字,然后插入到这个数字后面,依次循环,直到两个指针都指向数组的头package com.tangba...原创 2018-03-29 12:14:12 · 175 阅读 · 0 评论 -
单向链表中查找倒数第K个数
问题单向链表如果要找某一元素或者遍历链表,只能从头节点开始,所以如果我们用普通方法查找倒数第K个数,要分两步:第一步:先遍历链表中元素的个数,第二步:从头开始遍历,遍历到链表个数-k个数;用两个指针来快速找到倒数第k个数package com.tangbaobao.baidu;import java.time.temporal.Temporal;import java.uti...原创 2018-04-17 19:12:30 · 1037 阅读 · 0 评论 -
二叉排序树
树记得在软件工程的课程中,老师讲过:程序=数据结构+算法。随着学习的深入,越来越能理解这句话的含义了,吧一段程序或者一个应用抽象来看,一层一层剥去,最后剩下来的无非是用来存储内存数据的数据结构和怎么怎么存储以及实现业务逻辑的算法。在计算机的世界里,存储的数据的数据结构有很多,它们被用到不同的场景来解决不同的问题,只有了解了各种数据结构的实现和用途,我们才能将其用到正确的场景,解决合适的问题,所以...原创 2018-10-04 18:55:30 · 111 阅读 · 0 评论 -
1
package com.test;import java.util.*;import java.util.stream.Collectors;import java.util.stream.IntStream;/** * @author 唐学俊 * @create 2018/09/22 * 给定整数n,取若干个1到n的整数可求和等于整数m, * 编程求出所有组合的个数。比如当...原创 2018-09-23 00:15:13 · 124 阅读 · 0 评论 -
和为s的数字
剑指offer57描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s,如果有多对数字的和等于s,则输出任意一对即可package com.meituan.offer;import org.junit.Test;import java.util.Arrays;import java.util.List;import static java....原创 2018-09-28 23:33:38 · 139 阅读 · 0 评论 -
LeetCode804
package com.imooc.leetCode;import java.util.*;/** * @author tangxuejun * @version 2018/10/8 11:45 AM * 国际摩尔斯密码定义一种标准编码方式, * 将每个字母对应于一个由一系列点和短线组成的字符串, * 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 ...原创 2018-10-08 13:32:30 · 134 阅读 · 0 评论 -
LeetCode349
package com.imooc.leetCode;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;/** * @author tangxuejun * @version 2018/10/8 3:58 PM * 给定两个数组,编写一个函数来计算它们的交集。 */...原创 2018-10-08 16:12:33 · 243 阅读 · 0 评论 -
LeetCode:20
package com.imooc.test;import java.util.Scanner;import java.util.Stack;/**@author tangxuejun@version 2018/9/29 5:42 PMleeteCode:20括号匹配*/public class BracketTest {public static void main...原创 2018-09-29 19:56:15 · 107 阅读 · 0 评论 -
两种队列的实现以及性能测试
队列介绍队列是一种常见的数据结构,也是我们学习,工作中必须掌握的基础,众所周知,在计算机的世界里,基础的数据结构只有两种,一种是线性连续的存储结构–数组,还有一种是随机的存储结构—链表,很多知名或者常用的数据结构都是基于这两种基础数据结构衍生出来的,今天介绍的队列也一样,队列如它的名字,是一种先进先出(FIFO)的数据结构,在我们的实际生活或者技术方面由很广泛的应用,比如各种消息队列,阻塞队列,...原创 2018-09-30 11:11:39 · 993 阅读 · 0 评论 -
LeetCode203
package com.imooc.leetCode203;/** * @author tangxuejun * @version 2018/9/30 2:53 PM * 删除链表中等于给定值 val 的所有节点。 */public class LeetCode203 { public static class ListNode { int val; ...原创 2018-09-30 15:57:49 · 260 阅读 · 0 评论 -
java返回N个数中最大的前M个数
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。思路:将前k个数装入队列,向后遍历,如果得到的数和队列首的频率进行比较,如果大于,则交换堆顶的元素和当前元素。直到遍历完成class Solution {public List<Integer> topKFrequent(int[] nums, int k) { //对元素进行映射 Tree...原创 2018-10-17 16:56:23 · 1561 阅读 · 0 评论 -
旋转数组中的最小数字
什么是旋转数组比如: {4,5,6,1,2,3},{3,4,5,6,1,2}是{1,2,3,4,5,6}的旋转数组代码package com.tangbaobao.offer;import org.junit.jupiter.api.Test;/** * 旋转数组中的最小数字 * * @author 唐学俊 * @create 2018/04/03 **/p...原创 2018-04-03 19:35:52 · 119 阅读 · 0 评论 -
Fibonacci数列的两种计算方式
背景斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N...原创 2018-04-03 14:05:29 · 3041 阅读 · 0 评论 -
两个队列实现栈
两个队列实现一个栈,要求实现push()和pop()方法思路在每行代码的注释上:代码实现底层用了java.util.LinkedList的数据结构package com.tangbaobao.offer;import org.junit.jupiter.api.Test;import java.util.LinkedList;import java.util.Queu...原创 2018-04-03 11:50:07 · 130 阅读 · 0 评论 -
排序算法(一)之快速排序
快速排序快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。基本思路定义一个数,作为中轴数,定义两个指针,...原创 2018-03-15 12:25:25 · 227 阅读 · 0 评论 -
排序算法(二)之插入排序
插入排序思想: 插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。package com.tangbaobao.sort;import org.junit.Test;import java.util.Arrays;public class InsertSort { @Test pub...原创 2018-03-08 21:46:56 · 131 阅读 · 0 评论 -
Java中大数字计算
用基本数据类型计算的缺点我们知道,在Java中int类型在内存中占4字节,每个字节为8位,所以int类型能表示的范围的值为:-2^31 ~ 2^31-1 doubel类型在内存中占用8字节,能表述的范围是:-2^64 ~ 2^64-1;用基本数据类型计算普通的数当然没问题,但是在越来越大数值的计算中,比如100的阶乘,基本数据类型显然不能担任此重担;用数组来计算大数字 加入开辟一个长...原创 2018-03-09 15:45:52 · 616 阅读 · 0 评论 -
查找算法(一)之二分查找
二分查找思想二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找...原创 2018-03-09 17:11:00 · 194 阅读 · 0 评论 -
自定义简单LinkedList
数据结构我们知道,在数据结构中,有逻辑关系和物理关系:逻辑关系:人为认为集合:在一个范围内有多个数据,这多个数据相互没有练习线性:一对一树形:一对多图:多对多物理关系:内存存储顺序存储:数组链式存储:链表LinkedList的实现Linked是依靠一个Node类型的节点来存储它下一个节点的引用和本节点的数值 package com.tangba...原创 2018-03-10 22:37:57 · 252 阅读 · 0 评论 -
关于顺序存储和链式存储读写性能的比较(理论)
在内存中,数据有两种存储方式:顺序存储和链式存储,在Java中有也对应了两种封装的实现—>ArrayList和LinkedListArrayList数组的特点:长度固定,可以用索引直接找到元素 插入数据:由于ArrayList的底层封装着一个可变数组(在JDK1.8中,初始容量位10,如果所需容量大于数组容量,则扩容,扩容机制为:新数组=原来数组长度+原来数组长度>>...原创 2018-03-11 16:49:03 · 2519 阅读 · 0 评论 -
自定义简单Queue
队列及其特点队列是人为认为的一种数据结构,并不是计算机内存中真正存储的,所以队列的实现是对顺序结构或者链式存储的一种封装 特点:先进先出,通常有两个方法 入队:enqueue() 出队:dequeue() 基于单向链表实现队列注:上一节我们自定义了链表,此文队列底层运用上节的LinkedListpackage com.tangbaobao.queue;import c...原创 2018-03-11 22:05:41 · 383 阅读 · 0 评论 -
字符串中空格后移问题
有一个字符串,其中有空格若干,编程将空格移到最后,字符串长度不发生变化在不引入其他数据结的情况下,我想出了以下算法,可能不是最优,欢迎提出最优算法package com.tangbaobao.test;import org.junit.Test;/** * 字符串替换 * * @author 唐学俊 * @create 2018/03/30 * 将一个字符串中的空格移...原创 2018-03-30 19:03:48 · 1109 阅读 · 0 评论 -
58同城在线编程:求n个相同字串(O(n))
package com.tangbaobao.baidu;import org.junit.Test;/** * 58笔试题 * * @author tangyaya8 * @create 2018/04/02 **/public class FiveEight { @Test public void fun1() { String strin...原创 2018-04-02 11:46:00 · 120 阅读 · 0 评论 -
求数组中最大和子序列
@Test public void fun2() { int[] arr = {1, 2, 5 ,7,20, -10, 20, 5}; int maxSequense = this.getMaxSequense(arr); System.out.println(maxSequense); } public int getM...原创 2018-04-02 13:40:56 · 795 阅读 · 0 评论 -
Java数据结构中栈的两种实现
什么是栈栈是我们平时用的较多的一个数据结构,它的特点是先进后出,可以做括号匹配,撤销功能等,栈可以用两种最基本的数据结构实现链式栈 实现代码:package com.tangbaobao.stack;import com.tangbaobao.util.Node;/** * @author 唐学俊 * @create 2018/03/29 * 链式栈 **...原创 2018-04-02 16:03:01 · 1019 阅读 · 2 评论 -
用两个栈实现队列
用连个栈实现一个队列,要求队列有删除头和在尾部加入元素的功能思路因为栈是先进后出,队列是先进先出的特点,所以入队列的时候,进入A栈,删除或者出对列的时候,将A栈中的元素依次压入栈B,然后在依次弹出,就实现了先进先出的效果代码实现package com.tangbaobao.offer;import org.junit.Test;import java.util....原创 2018-04-02 21:25:26 · 125 阅读 · 0 评论 -
LeetCode题目go语言版(持续更新中)
说明:都是以题目代号为标题,点击题目编号即可进入LeetCode对应题目·125package mainimport ( "fmt" "regexp" "strings")func main() { s := "race a car" isPalindrome(s) fmt.Println(isPalindrome(s))}//输入: "A man, a plan, ...原创 2019-04-25 09:18:47 · 1053 阅读 · 0 评论