![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
cainiao_23333
这个作者很懒,什么都没留下…
展开
-
[算法题:如何让随机点亮的循环排列的100盏灯全部点亮]
本题来源于一算法同学的面试题第一想到使用数组,因为存在循环排列,觉得构造循环链表更不错,写完感觉可能还是使用数组简洁些/** * 算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机, * 按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化。 * 比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮。问设计一道算法,使得所有灯泡最后都亮。 */struct Node { int state; Node* next = nullptr; Node() {}原创 2021-06-21 19:57:33 · 394 阅读 · 2 评论 -
不使用额外空间的情况下实现两数交换
基本原理:数字a与数字a异或结果为0。基于此,首先让 a= a ^ b,然后 b= a ^ b= (a ^ b) ^ b = a,最后,a = a ^ b = (a ^ b) ^ a = b(注意原来的b对应现在的a了)。package com.ly.test;public class MyTest { public static void main(String[] args) { int a = -2020; int b = 2020; ...原创 2020-10-19 15:57:48 · 277 阅读 · 0 评论 -
java使用库实现倒序排序
import java.util.Arrays;import java.util.Comparator;public class Main { public static void main(String[] args) { Integer[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 }; /*Com...原创 2020-04-28 16:58:10 · 224 阅读 · 0 评论 -
红黑树
转自:https://www.jianshu.com/p/e136ec79235c红黑树可视化:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html转载 2019-12-25 23:37:33 · 68 阅读 · 0 评论 -
图文详解KMP算法(C++,Java实现)
KMP整体算法图解:buildMatch算法图解:match[?]:match[match[j-1]]//O(n+m)#include<bits/stdc++.h>using namespace std;//针对pattern字符串建立match数组,match[j]记录从0-j位置能最最大匹配元素的位置ivoid buildMatch(strin...原创 2020-11-15 16:46:10 · 2598 阅读 · 6 评论 -
05-快速排序
快速排序:和归并排序递归算法类似,采用分而治之的思路,采用枢纽的方式将数组分成两大块(分),进而递归的解决枢纽左边的和解决枢纽右边的(治),将左边+枢纽+右边放进一个数组则完成快速排序。//伪代码void quickSort(ElementType A[],int N){ if (N < 2) return; pivot = 从A[]中选一个主元; 将S = { A[] \ p...原创 2019-12-20 11:01:51 · 96 阅读 · 0 评论 -
04-归并排序
归并排序:顾名思义,就是不断的将两个有序的子序列归并成一个大的序列。所以核心操作就是有序子列的归并,如果有两个子列,共有N个元素,那么归并的时间复杂度是T(N)=O(N)。有了归并算法,我们采用易于理解的方式,分而治之的思想,也就是不断地递归将大的序列划分成小的序列,当序列只有一个元素的时候(自身有序),就是递归终止条件。//归并排序-递归实现//O(nlogn) O(n)#inclu...原创 2019-12-19 13:43:11 · 99 阅读 · 0 评论 -
03-堆排序(包含选择排序)
选择排序:顾名思义,就是每次循环从数组[i,n)选择一个最小的元素放入位置i,一共n个元素,需要n-1轮循环。伪代码如下:void selectionSort(ElementType A[], int N){ for(i=0; i<N; i++){ //从A[i]到A[N-1]中找最小元,并将其位置赋给MinPosition MinPositio...原创 2019-12-19 09:04:29 · 183 阅读 · 0 评论 -
02-希尔排序(by Donald Shell)
希尔排序:前面介绍过插入排序,要提高算法效率,我们必须一次消去不止1个逆序对,比如交换相隔较远的2个元素,所以这里引入希尔排序,每次交换的两个元素相隔较远,所以一次交换消除不止一对逆序对,会加快排序过程。定义增量序列DM>DM-1>...>D1=1 对每个Dk进行“Dk-间隔”排序(k=M,M-1,...,1) 注意:“Dk-间隔”有序的序列,在执行“Dk-1-间隔” 排...原创 2019-12-18 22:16:58 · 148 阅读 · 0 评论 -
01-简单排序(冒泡、插入)
前提:void xSort(vector<int>& arr)大多数情况下,为简单起见,讨论从小到大整数排序 N是正整数 只讨论基于比较的排序(>=<有定义) 只讨论内部排序 稳定性:任意两个相等的数据,排序前后的相对位置不发生改变 没有一种排序是任意情况下都表现最好的简单排序:冒泡排序+插入排序冒泡排序:将数字比作气球,每次比较都涉及相邻的两个元素,将大的...原创 2019-12-17 22:11:15 · 165 阅读 · 0 评论 -
堆排序
#include<bits/stdc++.h>using namespace std;void shift(vector<int>& arr,int start,int end) { int i = start; int j = 2*start; bool finished = false; while (j<=end && !...原创 2019-09-27 10:13:35 · 63 阅读 · 0 评论