数据结构
FFFXXXFFF
这个作者很懒,什么都没留下…
展开
-
Top问题常见具体场景问法、算法及时间空间复杂度分析
此处不再赘述其他排序方法,最优方法无疑是堆排序。堆排序是通过维护大顶堆或者小顶堆来实现的。堆排序法来解决N个数(非常大)中的TopK的思路是:1、先随机取出N个数中的K个数,将这N个数构造为小顶堆,那么堆顶的数肯定就是这K个数中最小的数了。2、然后再将剩下的N-K个数与堆顶进行比较,如果大于堆顶,那么说明该数有机会成为TopK,就更新堆顶为该数。3、此时由于小顶堆的性质可能被破坏,就还需...原创 2020-03-11 15:08:48 · 1793 阅读 · 0 评论 -
Java找出字符串中第一个不重复的字符
public int firstUniqChar(String s) { int start; int end; int result = s.length(); for(char ch='a';ch<='z';ch++) { start = s.indexOf(ch); end...原创 2020-03-11 12:48:50 · 1433 阅读 · 0 评论 -
Java:无序数组的中位数(最小堆)
中位数,就是数组排序后处于数组最中间的那个元素。如果数组长度是奇数,最中间就是位置为(n+1)/2的那个元素。如果是偶数,中位数是位置为n/2和位置为n/2+1的两个元素的和除以2的结果。算法要求:输入一个整数数组,求出本数组的中位数。思路1:将数组排序,然后直接从排序数组中找出中位数。时间复杂度取决于排序算法,最快是快速排序,O(nlogn),或者是非比较的基数排序,时间为O(n),空间为O...原创 2020-03-08 10:59:47 · 1785 阅读 · 0 评论 -
Java中输出字符串中的单个字符及获得其长度
Scanner sc = new Scanner(System.in);String s = sc.nextLine(); //Scanner类没有提供直接接收一个字符的方法,这里当作字符串来接收;char c = s.charAt(0); // 调用字符串的charAt()方法取得第一个字符就是了int n=s.length();//获得字符串s的长度...原创 2020-03-06 13:40:42 · 868 阅读 · 0 评论 -
Java如何获取多行字符串输入并判断输入结束
public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List> list = new ArrayList<List>();List list1 = new ArrayList();String s = null;while (!(s = sc.nextLi...原创 2020-03-06 13:29:07 · 6973 阅读 · 1 评论 -
Java获取键盘输入数组并输出
import java.util.Scanner;public class Main {public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); String str = sc.nextLine().toString(...原创 2020-03-06 13:11:24 · 4181 阅读 · 0 评论 -
有char a[n],char b[m]两个数组,n > m > 1000,b数组中的元素a中都有,现在需要生成数组c,将a中有b中没有的元素都放到c里面,要求O(N)。
有char a[n],char b[m]两个数组,n > m > 1000,b数组中的元素a中都有,现在需要生成数组c,将a中有b中没有的元素都放到c里面,要求O(N)。比如输入是char a[] = { ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘\0’ };char b[] = { ‘1’, ‘3’, ‘c’, ‘f’...原创 2019-09-08 13:05:13 · 513 阅读 · 2 评论 -
java数据结构之双向链表
public class DoubleLinkedList<E> { private Node first;//指向第一个元素 private Node last;//指向最后一个元素 private int length=0;//链表长度 class Node { private Node previous; priva...原创 2019-08-18 15:15:47 · 108 阅读 · 0 评论 -
Java Stack栈的实现
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定...原创 2019-08-13 09:34:10 · 132 阅读 · 0 评论 -
五大经典算法(分治算法、动态规划法、贪心算法、回溯法、分支限界法)
1.分治算法分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。它的一般的算法设计模式如下:...原创 2019-08-19 12:37:21 · 2054 阅读 · 0 评论 -
栈和队列的区别
1.队列先进先出,栈先进后出。2. 对插入和删除操作的"限定"。 栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。 从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。 栈和队列是在程序设计...原创 2019-03-27 10:34:27 · 879 阅读 · 0 评论