- 博客(20)
- 资源 (3)
- 收藏
- 关注
转载 白话经典算法系列之十 一道有趣的GOOGLE面试题
文字版:一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。 这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次。同时还要寻找重复元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如果哈希表中已经存在这个元素则说明这就是个重复元素。因此直接使用C++ STL中
2014-07-01 06:21:53
402
转载 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
首先来看看原题 微软2010年笔试题在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数。 计算数列的逆序数对个数最简单的
2014-07-01 06:16:38
493
转载 白话经典算法之七大排序总结篇
首先回顾下各种排序的主要思路:一. 冒泡排序冒泡排序主要思路是:通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。冒泡排序
2014-07-01 06:14:28
406
1
转载 白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总
2014-07-01 06:06:07
325
转载 白话经典算法系列之六 快速排序 快速搞定
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速
2014-07-01 06:05:03
288
转载 白话经典算法系列之五 归并排序的实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy
2014-07-01 06:03:56
286
转载 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其
2014-07-01 06:02:57
273
转载 白话经典算法系列之三 希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很
2014-07-01 06:01:35
324
转载 白话经典算法系列之二 直接插入排序的三种实现
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。
2014-07-01 06:00:24
296
转载 白话经典算法系列之一 冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp]
2014-07-01 05:58:02
373
转载 国家气象局免费天气预报接口,城市代码(JSON格式)
国家气象局提供免费的天气预报接口,但是访问时候需要指定城市代码。例如:http://m.weather.com.cn/data/101010100.html,其中的101010100指的就是城市北京。笔者将全国四百多个城市对应的代码转换成json格式,贴在这里,希望对需要的朋友有帮助:[html] view plaincopy
2014-07-01 03:07:30
1175
转载 Bug的类型
美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的论文“Why do computers stop and what can be done about it?”中首次提出了程序bug的类型,比如玻尔bug(Bohrbug)、 海森堡bug(Heisenbugs)等用著名科学家名称命名的bug。后来又出现了更多的bug类型。现在,让我们来看看它们都是什
2014-07-01 02:34:19
306
转载 iOS开发-键盘样式风格有关设置
一、键盘风格 UIKit框架支持8种风格键盘。[java] view plaincopytypedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapable, //
2014-07-01 02:30:27
319
转载 iOS开发 - 应用国际化开发
有时候, 我们的一款应用, 要面向各个领域, 各个国度的用户。而这个时候, 就涉及到了应用的国际化开发。国际化开发, 通俗来讲, 就是应用能根据用户当前设备使用的语言(本地化)来自动调整应用的语言, 使得每个用户都能正常使用应用。国际化开发的重要性不言而喻。总的来说, 涉及以下几个部分:1.应用程序名称2.字符串3.图片4.其他文件5
2014-07-01 02:26:42
310
转载 iOS开发-植入广告(iAd, Admob实例)
一、iAd1.需要加入iAd.framework2. .h文件加入如下代码,实现协议[cpp] view plaincopy#import #import @interface ViewController : UIViewController 3. .m文件加入如下代码
2014-07-01 02:18:34
631
转载 iOS获取各种文件的目录路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.documents,tmp,app,Library。(NSHomeDirectory()),手动保存的文件在documents文件里Nsuserdefaults保存的文件在tmp文件夹里1、Documents 目录:您应该将所有de应用
2014-07-01 02:04:19
290
转载 程序员的十大烦恼
10. 注释 — 只解释了“how”却没有解释“why”入门级的编程课程通常会教育学生们写代码前先写注释、而且要尽量多注释。 这种教育的出发点是“多注释肯定比少注释好、少注释肯定比没注释好”。可不幸的是,很多的程序员把这当成了一种任务,对每一行代码都注释一下。Java12
2014-07-01 01:55:43
268
转载 UIApplication常见属性和常用方法
1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplication sharedApplication].applicationIconBadgeNumber = 4;2.设置摇动手势的时候,是否支持redo,undo操作 //摇动手势,是否支持redo undo操作。 //3.0以后
2014-07-01 01:50:42
402
转载 iOS 通知中心 NSNotificationCenter & NSNotification
通知中心是 Foundation 框架的一个子系统,它向应用程序中注册为某个事件观察者的所有对象广播消息(即通知)。(从编程角度而言,它是 NSNotificationCenter 类的实例)。该事件可以是发生在应用程序中的任何事情,例如进入后台状态,或者用户开始在文本栏中键入。通知是告诉观察者,事件已经发生或即将发生,因此让观察者有机会以合适的方式响应。通过通知中心来传播通知,是增加应用程序对象
2014-07-01 01:39:02
420
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人