算法刷题
XiaoKeKeLaLa
blog.xiaokeke.vip
展开
-
链表排序
链表排序https://www.nowcoder.com/practice/d75c232a0405427098a8d1627930bea6?tpId=46&&tqId=29033&rp=1&ru=/ta/classic-code&qru=/ta/classic-code/question-ranking题目描述在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。示例1输入{30,20,40}输出{20,30,40}/** * s原创 2020-10-15 22:17:47 · 60 阅读 · 0 评论 -
堆排序
堆排序堆是一种数据结构,一种叫做完全二叉树的数据结构。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。大顶堆:a[i] >=a[2i+1] && ar[i] >= a[2i+2]小顶堆:a[i] <= a[2i+1] && a[i] <= a[2i+2]堆排序的基本思想:堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就原创 2020-10-11 23:10:32 · 63 阅读 · 0 评论 -
随机快排
快排在选取主元的时候,每次都选取最右边的元素。当序列为有序时,会发现划分出来的两个子序列一个里面没有元素,而另一个则只比原来少一个元素。为了避免这种情况,引入一个随机化量来破坏这种有序状态。在随机化的快排里面,选取a[left…right]中的随机一个元素作为主元,然后再进行划分,就可以得到一个平衡的划分。#include<bits/stdc++.h>#define random(x) rand()%(x)using namespace std; void swap(int *a,i原创 2020-10-10 15:05:48 · 158 阅读 · 0 评论 -
荷兰国旗问题
荷兰国旗问题给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。例如,给定数组:[2, 3, 1, 9, 7, 6, 1, 4, 5],给定一个值4,那么经过处理原数组可能得一种情况是:[2, 3, 1, 1, 4, 9, 7, 6, 5], 需要注意的是,小于4的部分不需要有序,大于4的部分也不需要有序,返回等于4部分的左右原创 2020-10-09 22:31:36 · 109 阅读 · 0 评论 -
逆序对
链接:https://www.nowcoder.com/questionTerminal/f50f89c3b4624cd6aa3312747cd45879来源:牛客网给定一个长度为n的排列A,逆序的定义:(i,j)为逆序对,当i<j && A[i]>A[j]求排列A的逆序对数量。输入描述:第一行一个整数n,表示排列的长度.第二行n个元素,表示A排列.输出描述:输出逆序对的数量示例1输入53 2 4 1 5输出4解析:原理是归并排序,在每次me原创 2020-10-08 22:51:46 · 294 阅读 · 0 评论 -
计算数组的小和
链接:https://www.nowcoder.com/questionTerminal/edfe05a1d45c4ea89101d936cac32469来源:牛客网数组小和的定义如下:例如,数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或等于s[0]的数的和为0;在s[1]的左边小于或等于s[1]的数的和为1;在s[2]的左边小于或等于s[2]的数的和为1+3=4;在s[3]的左边小于或等于s[3]的数的和为1;在s[4]的左边小于或等于s[4]的数的和为1+3+2=6;在原创 2020-10-08 10:07:33 · 388 阅读 · 0 评论