为了找工作重新拾起 C++.才发现,被 Python 宠坏后,再回头使用 c++,一下子无法适应如此复杂的情况.
回到正题,C++ 中如何排序一个 map.
我们都知道无法使用 std::sort 来排序 map,只有通过间接的方法.参考 stackoverflow 上的几个答案.
继续阅读 »
题目描述
给定一个已排序的数组,去除数组中的重复元素,只保留一个重复的元素,并且返回新的数组长度。
要求:
不要给数组分配额外的空间,你必须使用常量的内存大小进行原地操作。
例如:
给出数组A=[1,1,2],你的函数调用之后必须返回长度length=2,并且A现在变成[1,2]。
输入
一个已排序的数组,例如[1,1,2]。
输出
返回数组新的长度,例如length=2。
快慢指针法
设置fast指针遍历数组,slow指针指向不重复元素的下一位。
more
java
public static int removeDuplicates(int[] nums)
{
if (nums.length < 1)
继续阅读 »
题目描述
给定一个已排序的单链表,去除单链表中的重复元素,只保留一个重复的元素,并且返回新的单链表。
例如:
给出1->1->2,你的函数调用之后必须返回1->2。
输入
一个已排序的单链表,例如1->1->2。
输出
返回1->2。
代码示例
``` java
/** 单链表定义
*
* @author: crane-yuan
* @date: 2016-9-17 下午12:11:13
*/
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
继续阅读 »
昨天去某土豪公司笔试,最后一题竟然是红果果的写快排,偶竟然写不出来,长期没写算法了.......
网上关于快速排序的算法原理和算法实现都比较多,不过Java是实现并不多,而且部分实现很难理解,和思路有点不搭调。所以整理了这篇文章。如果有不妥之处还请建议。首先先复习一些基础。
1、算法概念。
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
2、算法思想。
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3、实现思路。
继续阅读 »
本文转载自:http://blogread.cn/it/article/6367?f=wb
我常常在想,当初我若不离开完美,现在肯定也是总监级的title了,收入比现在高一倍不止。但是另一方面,在编码能力上我甚至不如某些刚毕业的本科生。比如,快速排序的算法我很熟悉,就一句话:“随机选一个元素,用它把输入集分成两半,对这两半继续递归,然后将递归得到(已排好序)的结果合并”。但几个月前看算法书的时候自己尝试写了一下快速排序,发现远远是另外一回事。虽然我对这个算法很清楚,但是用C++实现的时候充满了疑惑,写出来的代码BUG很多,调了很久才调对。相反,如果拿这个做面试题去面应届生,我相信对北大清华的学生通过率应该很高,至少过半。那么我比他
继续阅读 »
原理
堆排序中的“堆”,它是:
一棵完全二叉树
树的每个节点都不比它的两个子节点小(有序)
由此得到最有用的信息:根节点是二叉树里面最大的元素
堆排序的过程是:
构造有序的堆
输出并删除最大的元素
重复前面两个步骤
继续阅读 »
从今天起至10月11日,持续连载。
关于计算机
ENIAC
出现于1946年。
是最早的计算机。
是电子管计算机。
其他
阶码,即浮点数的指数部分。
IPv6是128位的。
求补码:二进制下:各位取反再加1 或 把原码减1再取反。
关于算法
各种排序的时间复杂度
快速排序:$O(nlogn)$,最坏为$O(n^2)$。
冒泡排序:$O(n^2)$。
归并排序:$O(nlogn)$。
计数排序:$O(n)$。
插入排序:$O(n^2)$。
关于树
完全二叉树 vs 满二叉树:完全二叉树最后一层不一定满。
前序遍历:中左右;中序遍历:左中右;后序遍历:左右中。
节点数
继续阅读 »
希尔排序不应该放在这个系列的,因为并不十分清楚它的原理,想要完整了解的朋友请看维基百科
下面是原理的简单解释:
继续阅读 »
冒泡排序
原理主要是倒序比较
代码如下:
java
class Untitled {
public static void sortMaxMin(int array[]){
int i,j;
int len = array.length;
int temp;
//Boolean flag = true;
for (i = 0;ii;j--) {
if (array[j-1]>array[j]) {
temp = array[j];
继续阅读 »
前言
说明:本文章使用的ES版本是:6.2.4
在上一篇文章Elasticsearch搜索过程详解中,介绍了ES的搜索过程。
继续阅读 »