算法
Android_葱
这个作者很懒,什么都没留下…
展开
-
打乱一个1~100的数组(睡眠算法)
题目 题目的大意就是:打乱一个1~100的数组(每个数打乱的概率要相同) 一、等待取票 面试完静下来想了想,能不能有其他好的解法,然后第一种想法竟然是类似“睡眠排序”。 我的思路:去动物园排队,100个人,去盒子里取号,根据号码顺序入场。 如何设置这个盒子:获取????的规则,随机生成。 public class Main { public static void main(String[] a...原创 2019-10-31 09:45:40 · 1036 阅读 · 0 评论 -
算法 —— 冒泡排序
算法 —— 冒泡排序 算法中加入一个布尔变量,来标识该轮有没有进行数据的交换,若在某一趟排序中未发现数据位置的交换,则说明待排序的无序区中所有的项均已满足排序后的结果。那么就没有必要再次排序下去了。 public static void bubbleSort(int[] a) { boolean temp; for(int i = a.length - 1; i > 0; i...原创 2018-11-28 11:10:52 · 124 阅读 · 0 评论 -
最长回文字符串——Manacher(马拉车)算法
给定一个字符串,求出其最长回文子串。例如: s=“babad”,最长回文字符串:“bab”。(“aba” 也是一个有效答案) 根据Manacher算法得出来的答案为"aba"。 思路: 1.进行新的字符串进行装载 babad 装载后 $#b#a#b#a#d# 为什么需要装载? 为了消除奇回文与偶回文,让偶数回文数能有中心点标记位置 2.定义一个辅助数组int p[](记录的数字为最长回文字符串的长...原创 2019-05-10 21:13:42 · 224 阅读 · 0 评论 -
算法——选择排序
算法——选择排序 原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 #include <iostream> #include <vector> using namespace std; vo...原创 2019-08-31 01:00:19 · 94 阅读 · 0 评论 -
算法——直接插入排序
算法——直接插入排序 原理:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。 #include <iostream> #include <vector> using namespace std; void InsertSort(vector<int>& k){ int n = k.siz...原创 2019-08-31 01:57:26 · 144 阅读 · 0 评论 -
算法——希尔排序
算法——希尔排序 原理:按步长进行直接插入排序。适用于短小、基本有序的序列进行排序。 是不稳定的排序。时间复杂度 小于o(n^2) #include <iostream> #include <vector> #include <algorithm> using namespace std; template <typename T> void sh...原创 2019-09-19 20:40:08 · 108 阅读 · 0 评论 -
算法——快速排序
算法——快速排序 思路:选择一个基点,小的放基点左边,大的放基点右边。 快排不是稳定的排序。平均时间复杂度为O(n*logn),最坏的时候为(n^2) #include <iostream> #include <vector> #include <algorithm> using namespace std; template <typename T&...原创 2019-09-19 21:40:07 · 92 阅读 · 0 评论 -
算法——归并排序
算法——归并排序 归并排序的思想是:先切分到最小再排序(归并)。 快排的思想是:切分一次后立刻排序(交换)。 时间复杂度为O(n*logn),他是稳定的排序 #include <iostream> #include <vector> using namespace std; template <typename T> inline void merge(ve...原创 2019-09-28 21:25:08 · 107 阅读 · 0 评论