编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 话不多说,上code: /** * @param {stri
GC算法简介 1、GC是一种机制,垃圾回收器完成具体的工作 2、工作的内容就是查找垃圾释放空间、回收空间 3、算法就是工作时查找和回收所遵循的规则 常见的GC算法 1、引用计数 2、标记清除 3、标记整理 4、分代回收 GC算法之引用计数算法 1、核心思想:设置引用数,判断当前引用数是否为0 2、引用计数器 3、引用关系发生改变时改变引用数字 4、引用数字为0是立即回收 代码演示如下 co
八点的飞机,七点的笔试。 写了大概三十多分钟 编程题 第一题 easy 没啥可说的 第二题 数据结构题,感觉还是挺有意思的,做题思路是将操作对k降序排序,要考虑到时间靠后的排前面,这是比较经典的覆盖的想法。 排序后先处理第一个操作(k最大),前k个升序存下来,之后的就直接记录到答案中(它们都不受影响)。然后之后就是对这前k个操作,实际上同理就行,处理当前的就去看上一次是是升序还是降序。升序就从后往
1.自我介绍 2.算法原理: 简历上所有算法原理。 工资不高,面完秒挂。 (面试官不是很专业,有点不偏好数分的来搞算法)
记录一下阿里的流程 一面电话面40分钟: 先自我介绍 1.问项目 2.开放题:有若干个策略,怎么对用户使用这些策略使得收益最大 面完笔试 二面电话面40min: 全程通电话,面试官发了个链接,给我出题做 1.推对偶 2.vrptw建模 3.2的基础上加上兼容点和不兼容点约束 4.使用过的算法遇到的困难和解决方法。 三面电话面30min: 自我介绍 1.问竞赛做的东西,有想过怎么改进 2.聊人生、职
25道选择+3道编程 选择包括linux系统题,C++题和一些从没见过的算法题,上来第一道就是从没见过的什么什么圆算法。。。 编程题全都很难,这在leetcode里是不是都得算hard啊?最后一题停车场直接全输出(-1,-1)竟然40%通过。。。 真的好难。。。沉默了。。。。。
附近地点搜索 题目详情 找一个点集中与给定点距离最近的点,同时,给定的二维点集都是固定的,查询可能有很多次,时间复杂度O(n)无法接受,请设计数据结构和相应的算法。 分析与解法 此题是去年微软的三面题,类似于一朋友@陈利人出的这题:附近地点搜索,就是搜索用户附近有哪些地点。随着GPS和带有GPS功能的移动设备的普及,附近地点搜索也变得炙手可热。在庞大的地理数据库中搜索地点,索引是很重要的。但是,我
sift算法的编译与实现 代码:Rob Hess维护的sift 库。 环境:windows xp+vc6.0。 条件:opencv1.0、gsl-1.8.exe 昨日,下载了Rob Hess的sift库,将其源码粗略的看了看,想要编译时,遇到了不少问题,先修改了下代码,然后下载opencv、gsl。最后,几经周折,才最终编译成功。 以下便是sift源码库编译后的效果图: 为了给有兴趣实现sift算
快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。 特别是python能用一句话实现快速排序。 思路说明 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解
贪心算法 建议观看MIT算法导论-贪心算法中的课程。
洗牌算法 洗牌算法,顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。 如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count—,即可。 这相当于把这个元素删除,代码如下: #include <iostream> #include <ctime> using namespace std; const int maxn = 10; int a[m
排序算法的评价 稳定性 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。 计算复杂度(最差、平均、和最好表现) 依据串行(list)的大小(n),一般而言,好的表现是O(nlogn),且坏的行为是O(n2)。对于一个排序理想的表现是O(n)。仅使用一个
单链表 单链表就地翻转 递归算法: void reverse(struct list_node *head) { if(NULL == head || NULL == head->next) return; reverse1(head->next); head->next->next = head; head->next = NULL; } 非递归算
也称为跳跃表(Skip List)是一种基于【有序链表】的扩展,简称【跳表】。 存储的数据是有序的。 所以跳表对标的是平衡树(AVL Tree)和二分查找,是一种插入/删除/搜索都是O(log n)的数据结构。 它最大的优势是原理简单、容易实现、方便扩展、效率更高。 定义 增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链
分治和回溯其实本质上就是递归,只不过它是递归的其中一个细分类。可以认为 分治和回溯 最后就是 一种特殊的递归 或者是较为复杂的递归即可。 分治算法,即分而治之(divide and conquer,D&C),把 一个复杂问题 分成 两个或更多 的相同或相似 子问题,直到最后子问题可以简单地直接求解,最后将子问题的解合并为原问题的解。 分治法的核心思想就是,将原问题分解成小问题来求解,只要遵循三个步