刷题那些事儿
State of aaart
这个作者很懒,什么都没留下…
展开
-
反转单链表和双链表
用一个临时变量节点temp保存当前节点的下一个节点,当前节点的下一个节点指向前节点pre,pre便成为当前节点,当前节点便成为temp原创 2020-04-26 15:59:28 · 122 阅读 · 0 评论 -
用队列实现栈结构
准备两个队列,由于队列为先入先出,栈为先入后出,每次将原队列前n-1个数放入辅助队列,原队列的最后一个数弹出,此时原队列为空,所以改变原队列与辅助队列的引用,再将新的原队列的前n-1个数放入辅助队列,原队列剩下的一个数弹出,就实现了先入后出操作。code:import java.util.LinkedList;import java.util.Queue;import java.ut...原创 2020-04-26 11:06:42 · 112 阅读 · 0 评论 -
实现一个能返回栈内最小值的操作
要求时间复杂度为O(1), 思路是准备两个栈,一个原数据栈,一个用于存放最小值得辅助栈,每次入栈时,都比较当前入栈的元素与辅助栈栈顶的元素,若比辅助栈栈顶元素小,则压入辅助栈,若比辅助栈栈顶元素大,则辅助栈继续压入它的栈顶元素。最后,辅助栈的栈顶元素一定为目前所压入栈的最小元素。code:import java.util.Stack;public class StackWithGet...原创 2020-04-26 10:59:29 · 163 阅读 · 0 评论 -
用数组实现栈
public class ArrayToStack { public static class array2stack { private Integer[] arr; private int index; //数组下标,每压入一个数则index加一, index实际上就是数组大小size public array2stack(int initsize) { //构造器...原创 2020-04-26 10:48:58 · 112 阅读 · 0 评论 -
用数组实现队列
public class ArrayToQueue { public static class array2queue{ private Integer[] arr; private int size; //数组大小变量 private int start; //start位置的数作为出队 private int end; //end位置的数作为入队 public ...原创 2020-04-26 10:47:41 · 106 阅读 · 0 评论 -
排序算法
冒泡排序:从第0位置开始与下一个位置逐个比较大小,较大的数一直往右窜,知道最右位置时间复杂度:O(n^2) 稳定性:稳定code:public class BubbleSort { //O(N^2) public static void main(String[] args) { int[] arr = {6,4,6,7,8,9,2,1}; if(arr == n...原创 2020-04-26 10:38:29 · 125 阅读 · 0 评论 -
打印字符串的全排列
分成两步,第一步得到第一个位置上可能的所有元素,即将第一个位置上的数与后面各个位置上的数进行交换;第二步,除了首个位置以外的所有数进行排列(递归),即将后面的字符中的第一个与后面的数进行交换。code:public static void printAllPerm(char[] cha, int left, int end) { if(cha == null || cha.lengt...原创 2020-04-24 11:40:11 · 199 阅读 · 0 评论 -
打印字符串的所有子序列
递归解决,每来到一个位置,决定要或不要该位置上的元素,递归边界为直到最后一个位置的后一个位置,打印当前选择好的字符串code:public static void PrintAllSub(char[] cha,int i, String res){ if(i == cha.length){ System.out.println(res); } Pr...原创 2020-04-24 10:01:05 · 388 阅读 · 0 评论 -
数组中重复的数字
一个长度为n的数组里,所有数组都在0~n-1的范围内,请找出数组中任意一个重复的数字,例如输入长度为7的数组{2,3,1,0,2,5,3}那么对应的输出是重复的数字2或者3。1)采用辅助结构来做,首先想到哈希表,每遍历一个元素,若表内未包含该元素则加入,若已经包含该元素,说明已找到一个重复数字。该算法复杂度为O(n),但需要空间复杂度O(n)。code:import java.u...原创 2020-04-23 22:45:22 · 77 阅读 · 0 评论 -
最长不重复字符串的子字符串
找出并计算给定字符串中最长的不重复的子字符串,假设字符串只包含'a~z'字符,如:'arabcacfr'中 最长不重复子字符串是'acfr',长度为4。思路:动态规划算法来降低复杂度,以i为结尾的不重复子字符串的最长长度为f(i), 从左往右遍历字符串的每个字符。当要计算f(i)时,已经得到f(i-1)。每次遍历一个字符,若字符未曾出现,则f(i)=f(i-1)+1,若已经出现,则需要借助一个...原创 2020-04-23 21:24:31 · 200 阅读 · 0 评论