关于排序的几种练习.
来源:互联网 发布:知乎关注最多的问题 编辑:程序博客网 时间:2024/05/16 18:54
传送门://http://www.nowcoder.com/courses/1/2/13
题目描述
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。
给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。
测试样例:
[2,1,4,3,6,5,8,7,10,9],10,2
返回:[1,2,3,4,5,6,7,8,9,10]代码
class ScaleSort {public: vector<int> sortElement(vector<int> a, int n, int k) { for (int i=0; i<n; i+=k) { int m = i+k<=n?k:n-i; for (int j=m; j>0; --j) { make_heap(a.begin()+i, a.begin()+i+j,[](int a,int b){return a<b;}); swap(a[i], a[i+j-1]); } } return a; }};
题目二 传送门:http://www.nowcoder.com/courses/1/2/14
题目描述
请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。
给定一个int数组A及它的大小n,请返回它是否有重复值。
测试样例:
[1,2,3,4,5,5,6],7
返回:trueAC代码
class Checker {public: bool checkDuplicate(vector<int> a, int n) { int mark = n; while (mark>0) { make_heap(a.begin(), a.begin()+mark); swap(a[0], a[mark-1]); if(mark!=n&&a[mark-1]==a[mark]) return true; mark--; } return false; }};
传送门://http://www.nowcoder.com/courses/1/2/15
AC代码
class Merge {public: int* mergeAB(int* A, int* B, int n, int m) { int markA = n-1,markB = m-1,last = n+m-1; while (markB>=0) { while (markA>=0&&markB>=0&&A[markA]>B[markB]) { A[last--] = A[markA--]; } A[last--] = B[markB--]; } return A; }};
0 0
- 关于排序的几种练习.
- 关于插入排序的几种实现
- 关于几种排序算法的理解
- 关于NSArray的几种排序:
- 关于排序的几种算法
- 排序练习1:HDOJ 2561 几种简单排序
- 持续更新关于几种排序方式的的问题......
- 关于对常见的几种排序的理解。
- 关于几种排序的结题报告
- 关于冒泡排序算法的几种实现
- 关于JAVA的几种排序算法研究
- 关于几种简单的排序算法-插入、冒泡、选择
- 关于几种排序的个人整理及分析
- 关于c语言几种排序方法的理解
- 关于几种排序的时间复杂度和空间复杂度
- 关于冒泡排序的几点想法
- linux下练习 c++ 几种排序算法
- 基本的几种排序
- 决策树之CART算法
- Dual-Source Deep Neural Networks for Human Pose Estimation 论文总结
- hdu5637 Transform (bfs+预处理)
- cxf webService异步调用模式
- ML for hackers 第一章笔记
- 关于排序的几种练习.
- 图像增强算法实现--图像的椒盐噪声、随机噪声、高斯噪声、均值滤波、中值滤波以及高斯滤波
- Bootstrap的一个很漂亮的web万能模板
- AlphaGo 开源项目研究(2)
- Leetcode 147. Insertion Sort List(链表实现快排)
- android weight(权重)的具体分析
- LightOJ 1138 - Trailing Zeroes (III)(二分&阶乘末尾0的个数)
- 凭啥Java的运行环境称虚拟机,Python的只能称解释器
- 今年第一次面试