算法
十年饮水不凉热血
苟利代码生死以,岂因长短趋避之
展开
-
算法-leetCode 寻找最长子串
package icefire.demo.algorithm.leetcode;import java.util.HashMap;import java.util.Map;/** 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...原创 2020-03-15 13:21:46 · 248 阅读 · 0 评论 -
算法-重建二叉树
问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。我自己的答案:package com.zjq.arithmetic;import java.util.ArrayList;impor原创 2017-08-08 11:45:38 · 208 阅读 · 0 评论 -
用栈实现队列-算法
问题描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。关键点:不要每次push或pop一个元素,都重置两个栈,对于栈2,当栈2中的元素为空的时候再把栈1 的复制过来。问题很简单,但是是一种打开思维的模式,一种值得学习的思维方法。import java.util.Stack;public class Solution { Stack s原创 2017-08-17 17:46:28 · 247 阅读 · 0 评论 -
算法基础-使用循环不变式解决插入排序问题
思想是直接插入排序,即每次拿一个数字向已排序好的数字中插入,采用循环不变式的设计思想。 循环不变式:一般而言,用这个式子表示希望得到的结果,如果在循环的每一步,这个式子都是正确的,那么循环结束后,这个式子也正确,并得到了期望的结果。 如何证明循环的每一步式子都是正确的? 需要证明式子满足三个性质: 初始化:循环的第一次迭代之前,它为真。 保持:如果循环的某次迭代之前它为真,那原创 2017-08-28 15:33:46 · 635 阅读 · 0 评论 -
算法-归并排序
归并排序的核心思想是分治策略,把原问题分解为规模更小的子问题求解,然后再把求解后的子问题的解合并为原问题的解。废话不多说,直接看代码:package com.zjq.arithmetic.sort;public class Merge_Sort { public static void main(String[] args) { int[] input={4,3,2,1,6,7原创 2017-08-31 16:03:22 · 189 阅读 · 0 评论 -
算法-时间复杂度分析
本文章从归并排序的算法代码出发,通过一步步分析计算出此算法的时间复杂度。关于归并排序的分析,我上一篇博客有:归并排序分析这里只进行代码分析。先看算法的代码:private int[] merge_sort(int[] input,int start,int end){ if(start<end){ int mid=(start+end)/2; merge_sort(原创 2017-08-31 18:24:56 · 332 阅读 · 0 评论