数据结构和算法——Java实现
Ascend2015
这个作者很懒,什么都没留下…
展开
-
LeetCode基础题——字符串篇
一共也是10题,时间关系,先上4题,明天再补package leetcode;public class StringProblems { public static void reverseString(char[] s) { int len = s.length; for (int i = 1; i <= s.length / 2; i++)...原创 2019-03-05 23:33:33 · 273 阅读 · 0 评论 -
算法思想(一)——动态规划基础
一直觉得无论是背多少遍排序,背多少leetcode的题目,都是舍本逐末的,这些是术不是道,算法思想才是根本,但是所谓的普遍规律在教材上通常都是抽象和晦涩的,算法思想给我的感觉也是如此,《算法导论》里用来描述它的语言十分地生涩,可是如果希望以后在遇到算法笔试或者是面试手撕算法题时不再无从下手,也只能硬着头皮上了。本篇讨论动态规划的概念性问题。动态规划基础最优子结构1.什么时候用算法导论种介绍...原创 2019-02-26 23:36:43 · 486 阅读 · 0 评论 -
剑指Offer试题——Java实现(四)
4.1 在不使用±*/的条件下,计算两个整数相加这里考察的就是对位运算的掌握情况public static int addWithoutOperator(int num1,int num2){ while(num2!=0){ //计算个位 int tmp=num1^num2; //计算进位 num2=(num1&num2)<<1; num1=tmp;原创 2019-03-06 15:01:03 · 168 阅读 · 0 评论 -
LeetCode基础题——数组篇
package leetcode;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class BasicalAlgrithm { /** * 去除数组中重复元素,返回新数组大小 */ public static i...原创 2019-03-03 22:41:23 · 291 阅读 · 0 评论 -
leetcode基础题——设计问题
这类主要是会用到基础的数据结构,考察的是对基础数据结构的掌握程度和灵活使用。1. Shuffle an array随机打乱一个没有重复元素的数组这里我们遍历数组,然后将第i个元素与i+1前的任意元素交换位置。/*** */package leetcode;import java.util.Random;public class ShuffleSolution { p...原创 2019-03-17 22:39:14 · 346 阅读 · 0 评论 -
LeetCode动态规划(简单)
1.1 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-1...原创 2019-03-13 00:04:31 · 245 阅读 · 0 评论 -
LeetCode动态规划(中等难度)
这两题是求二叉树数目的package com.coding.leetcode;import java.util.List;import java.util.ArrayList;import com.coding.adt.*;public class LeetCodeSolution{ /** * 不同的二叉树1: * 思路:假设n个结点存在二叉排序树的个数死...原创 2019-04-29 15:20:27 · 642 阅读 · 0 评论 -
LeetCode动态规划(困难)
32.给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()" //对字符串遍历,进行括弧有效性验证,记录最大的有效长度。同样的方式,倒序再来一次,取最大值 //多读几遍源码总能懂的 ...原创 2019-05-10 13:51:53 · 547 阅读 · 0 评论 -
子数组的和的差值最小
这个问题是泛微面经的评论里一个老哥碰到的,对于我这种算法彩笔来说还是写写记下来的好。题目数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小。数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100比如a[]={2,4,5,6,7},得出的两组数{2,4,,6}和{5,7},abs(sum(a1)-sum(a2))=0;比如{2,5,6,10},abs(...原创 2019-06-03 00:11:45 · 1376 阅读 · 0 评论 -
Java数据结构之二叉平衡树
首先二叉平衡树依然是一课二叉搜索树,关于二叉搜索树以及其平均查找时间的分析,可以见关于二叉查找树的平均查找时间的问题这一篇。我可能写得不太好,所以最好还是参考一些教材,教材的描述通常会更为严谨,博客比较适合临阵磨枪。通常我们认为二叉搜索树的平均查找时间为O(logN),但不排除极端状况下二叉查找树会成为链表,那么此时,查找时间就会上升到O(N),这有悖于我们使用二叉查找树的初衷,好在我们遭遇到的问...原创 2019-02-20 16:07:05 · 704 阅读 · 0 评论 -
剑指offer试题——Java实现(三)
非递归方式实现求解斐波那契数列第n个元素public int fib1(int n){ int result=0; int preOne=1; int preTwo=0; if(n==0) return result; if(n==1) return preOne; for(int i=0;i&amp;lt;n;i++){ result=preOne+preTwo; preT...原创 2019-02-18 17:35:57 · 173 阅读 · 0 评论 -
关于二叉查找树的平均查找时间的问题
首先,放附上二叉查找树package com.company.adt;/** * Created by Administrator on 2017/6/2. */public class BiSearchTreeE extends Comparablesuper E>> { private TreeNodeE> root; private int count;原创 2017-06-29 13:08:31 · 1882 阅读 · 0 评论 -
Java基础数据结构——链表与顺序表
抽象数据类型所谓抽象数据类型,就是带有一组操作的对象的集合。一般常有的操作是增(add)、删(delete)、包含(contains)、查(find)。我们常用的一些数据结构类型有表、栈、队列等等,这也是数据结构中最为基本的类型。这些东西老是没法熟记,要写的时候虽然也能憋出来,总觉得不够畅快。这里先说下表,表一般是两种类型,以数组为核心的顺序表和以抽象节点为核心的链表。先说下顺序表原创 2017-09-03 14:53:47 · 408 阅读 · 0 评论 -
Java排序
排序的demo写过N多次老是记不住,所以决定还是写个博客好了1.快速排序在C++或者Java中对基本数据类型进行排序特别有用。它的平均运行时间是O(NlogN)。像归并排序一样,快速排序也是一种分治的递归算法。将数组S排序的基本算法由以下四步组成:1. 如果S中的元素个数是0或者1,则返回;2. 取S中任一元素v,称之为枢纽元;2. 将S-{v}(S中的其余元素)划分为原创 2017-06-28 22:04:18 · 232 阅读 · 0 评论 -
根据先序遍历,中序遍历结果求原二叉树或者后序遍历——Java实现
思路首先,根据题设,我们可以得到这样的信息:根节点:先序遍历的第一个值即为根节点;中序遍历一定是:中序遍历一定是 { 根节点的左子树中的节点集合 },root,{ 根节点的右子树中的节点集合 }。假设PreOrder: GDAFEMHZ,InOrder: ADEFGHMZ 解决问题的思路如下:找到根节点,根据前序遍历,可以得到根节点;...原创 2018-09-07 22:07:21 · 796 阅读 · 0 评论 -
合并链表,合并数组
合并链表,合并数组题目一:合并有序链表题目二:合并有序数组题目一:合并有序链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = va...原创 2018-10-14 16:40:49 · 509 阅读 · 0 评论 -
排序算法之基数排序
基数排序又称桶排序,相比快排、冒泡一类的比较式排序比较特殊,它并不直接对元素进行比较,也不进行元素交换,我们要做的是将元素进行分类,所以称为分配式排序,基数排序的时间复杂度下限是O(nlogn),这一点是基数排序相比于基于比较排序算法的优势。基数排序计数排序我们可以将它理解为计数排序基础上的一种排序方式,首先我们先了解一下计数排序。对于一定范围内的整数,它的时间复杂度能够做到O(n+k),...原创 2019-01-28 14:47:21 · 284 阅读 · 0 评论 -
Java数据结构之红黑树
红黑树首先是一个平衡二叉树,但是它不是完美的平衡二叉树。让一棵二叉查找树在动态插入的过程中保持平衡需要的代价比较高,红黑树是为此产生的。1. 红黑树的性质每个节点只能是红色或者是黑色;根节点必须是黑色;每个叶子节点是黑色,注意,这里叶子节点指末端空节点;如果一个节点是红色,那么它的子节点必然是黑色,这意味着不存在两个连续的红色节点;从一个节点到该节点的子孙节点的所有路径上包含相同数量...原创 2019-02-15 17:08:38 · 536 阅读 · 0 评论 -
剑指offer试题——Java实现(一)
1.链表篇1.1删除节点public void deleteNode(ListNode head,ListNode delNode){ if(head==null||delNode==null) retrun; if(head==delNode){ head=null; }else{ //若delNode刚好是末尾节点,则后移一位 if(delNode.next==nul...原创 2019-02-11 15:48:27 · 196 阅读 · 0 评论 -
剑指offer试题——Java实现(二)
2 二叉树篇2.1 判断二叉树2是否是二叉树1的子树public class TreeTest{ public boolean hasSubTree(TreeNode root1,TreeNode root2){ boolean result=false; if(root1!=null&amp;amp;amp;amp;&amp;amp;amp;amp;root2!=null){ if(root1.data==root2.da...原创 2019-02-11 17:30:58 · 178 阅读 · 0 评论 -
基于HashMap和双向链表的LRU缓存
public class LRU<K, V> implements Iterable<K> { private Node head; private Node tail; private HashMap<K, Node> map; private int maxSize; private class Node { ...原创 2019-07-22 11:00:08 · 336 阅读 · 0 评论