
算法
等你下课_
努力起码可以大器晚成
展开
-
选择排序
每一次循环选择一个最小的数放到数组前面,每轮外循环只交换一次,需记录数值最小的下标弊端:不稳定性时间复杂度,空间复杂度自己写的,内层循环选择了从后往前遍历。看网上大部分是从前往后遍历,于是又写了一个 public static void xuanze(int[] a) { int minIndex; int tem; //外层循环次数 for (int i ...原创 2019-09-12 02:16:33 · 85 阅读 · 0 评论 -
冒泡排序
依次交换相邻的两个数,将大的数放后面。弊端:交换了很多次元素,消耗内存。时间复杂度度和空间复杂度简单粗暴的冒泡排序 public static void maopao1(int[] a) { int tem; //外层遍历n-1次 for (int i = 0; i < a.length-1; i++) { //j+1<length-i for...原创 2019-09-12 01:20:36 · 91 阅读 · 0 评论 -
最长递增子序列(信封嵌套问题)
https://mp.weixin.qq.com/s/IPW55k5e3xPV2Wrl7ufctw这道题其实是计算:最长递增子序列问题(Longes Increasing Subsequence,简称LIS)注意子序列和子串是不一样的,子串是连续的。标准的LIS是在数组中寻找最长子序列(子序列不是子串),而信封是(w,h)这样的形式存在,如何将LIS算法运用过来?先对宽度w进行...原创 2019-08-19 23:15:02 · 235 阅读 · 0 评论 -
贪心算法
贪心算法是动态规划的一种特例,每次选择的结果对其下一次选择时没有影响,可以没有顾虑的选择本次最优的。每一次选择都选择局部最优,最终结果就是全局最优一、区间调度问题:给你多个形如[start,end]的闭区间,设计一个算法计算出最多能有几个互不相交的闭区间例如:区间数组A=[[1,3],[2,5],[4,6]],这三个区间最多有两个区间互不相交,[1,3]和[4,6],则返回2。...原创 2019-08-18 21:23:00 · 82 阅读 · 0 评论 -
鸡尾酒排序(冒泡排序最终版)
鸡尾酒排序:每一轮首先从前往后遍历出一个最大值放在最后面,然后从后往前遍历一个最小值放在最前面,即每一轮遍历选出一个最大值和一个最小值。适合用于大部分元素已经有序的情况时间复杂度和空间复杂度?是否稳定性?简单粗暴的鸡尾酒排序: public static void jiweijiu1(int[] a) { int tem; //首先确定外层循环遍历次数 for (in...原创 2019-09-13 04:08:28 · 580 阅读 · 0 评论 -
LRU算法,缓存淘汰机制
LRU(Least Recently Used 最近最少使用)算法有两种策略(均以队列的方式实现)一种是不调整的, 一种是随时进行调整的,即缓存命中后,将这个数据缓存项移到LRU队列的最前端。java中利用LinkedHashMap来实现LRU算法,需要覆写其中的removeEldestEntry(Map.Entry)方法即可。如果去看LinkedHashMap的源码可知,LRU算法是通过...原创 2019-09-13 21:15:21 · 602 阅读 · 0 评论 -
插入排序
选定一个有序区间,将后面的值一 一和有序区间中的值进行比较,插入适当的位置时间复杂度,空间复杂度,稳定性? public static void charu(int[] a) { //明确一个待插入的值,即这个值对应的下标index,这个值将要插入到什么位置 int insertValue; //又有多少个待插入的值即对应多少次循环 for (int i = 1; i &...原创 2019-09-14 11:31:58 · 93 阅读 · 0 评论 -
合并两个有序数组,合并之后保持有序
/** * * @param a 有序数组a * @param b 有序数组b * @param c 合并之后的有序数组c */ public static void merge(int[] a,int[] b,int[] c) { int i = 0; int j = 0; int n = 0; while(i<a.length &&am...原创 2019-09-20 23:37:12 · 1009 阅读 · 0 评论