自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小僧Coding

学习随笔

  • 博客(103)
  • 资源 (2)
  • 收藏
  • 关注

原创 分类中使用@property注意点

注意:在在分类中声明@property, 只会生成方法的声明, 不会生成方法的实现和带有_下划线的成员变量;

2016-09-23 11:11:47 885

原创 oclint-xcodebuild 的使用

一、OCLint官网简介 OCLint是一个代码静态分析描工具,可以用来提高质量和减少缺陷,他目前支持C,C++,Objective-C语言,它目前可以发现这些问题:可能的bug - 空的 if / else / try / catch / finally 语句 未使用的代码 - 未使用的局部变量和参数 复杂的代码 - 高圈复杂度, NPath复杂, 高NCSS 冗余代码 - 多余的if语句

2016-08-21 09:26:57 1499

原创 block知识点回顾

1、简介 (1)Block是OC中的一种数据类型,在iOS开发中被广泛使用 (2)^是Block的特有标记 (3)Block的实现代码包含在{}之间 (4)大多情况下,以内联inline函数的方式被定义和使用 (5)Block与C语言的函数指针有些相似,但使用起来更加灵活2、格式说明 (返回类型)(^块名称)(参数类型) = ^(参数列表) {代码实现}; 如果没有参数,等号后面参数列

2016-08-04 11:45:36 873

原创 scrollView中contentSize、contentInset和contentOffset知识点回顾

一、概述 IOS中,UIScrollView是可以滚动的视图,它有两个子类,分别是UITableView和UITextView。UIScrollView有三个容易让人混淆的属性变量: contentSize、contentInset和contentOffset。二、具体比较 1、首先,UIScrollView有一个frame属性,一般为整个手机屏幕或者手机屏幕上某一块固定的区域,总之,我们看到

2016-08-02 18:22:43 6853

原创 Masonry使用小记

1、简介 Masonry是目前最流行的Autolayout第三方框架,使我们能够用优雅的代码方式编写Autolayout,省去了苹果官方繁琐的Autolayout代码,大大提高了开发效率。2、使用步骤 (1)使用CocoaPods托管该库或添加Masonry文件夹的所有源代码到项目中 (2)添加2个宏、导入主头文件// 只要添加了这个宏,就不用带mas_前缀#define MAS_SHORT

2016-07-29 17:17:40 2508

原创 CocoaPods 使用经验小记

1、使用CocoaPods来管理第三方框架时,当执行 pod install / pod update后,可能会很慢,一直卡着不动,原因是当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。加参数的命令如下:pod install --verbose --no-repo-updatepod update --verbose --no-re

2016-07-29 09:49:50 1753

原创 Jenkins + Xcode + Fir.im 自动构建项目,并打包ipa上传(MAC)

Jenkins + Xcode + Fir.im 自动构建项目,并打包ipa上传(MAC)

2016-07-20 16:02:57 7648

原创 Xcode打包ipa的步骤(简述)

一、概述 (1)iOS开发中,应用程序打包 = ipa = 安装在手机上。(注意,并不是所有的ipa都可以随意安装) (2)如果想让用户可以安装ipa,必须在打包程序的时候说清楚 哪一个应用程序可以安装到哪一台设备上。 (3)一般要想打包(测试或发布),必须成为苹果开发者。二、打包(生成ipa测试包)步骤 第1步:配置发布证书和AdHoc描述文件 (1)登陆苹果开发者主页 https:/

2016-07-16 16:53:57 30373

原创 iOS开发证书相关(简述)

一、开发者账号分类 一般分为个人的、企业的、商业的三种,详细自己百度。二、Certificates 证书、Identifiers 标示符、Profiles 描述文件 的简介 1、证书(Certificates) 即安装在电脑上,只有安装了证书的电脑,才有可能进行真机调试。 - All - Develpment 开发的证书 - 最多可以有两个证书 - Production 商品化的证

2016-07-16 14:39:01 1994

原创 二叉树的镜像(反转二叉树)

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二叉树结点的定义如下:struct BinaryTreeNode { int data; BinaryTreeNode *Left; BinaryTreeNode *Right; }; 树的镜像,可通过下图来直观的展示: 这两棵树,就是互为镜像的二叉树。由图分析可知,求二叉树镜像的思路如

2016-07-13 11:23:36 2007

原创 Office For Mac 中的 Excel 表格怎样换行

解决方案: (1)Offcie for Mac 的 Excel 表格里,选中一个单元格按回车,会自动跳到下面的单元格(Windows 版也一样)。 (2)若想在单元格里换行,按住 control、option、command 这三个键中的任意两个,再回车即可。

2016-07-10 11:32:20 46408 2

原创 Retina、非Retina、点、像素、iPhone分辨率

1、@1x @2x和@3x 简介 首先看下切图的命名方式: 假设有两张图片名为:[email protected][email protected],这是对于ios 切图来说的。 iPhone 4、5、6 是采用[email protected] 这个图,iPhone 6 plus就采用[email protected] 但是对于iPhone加载的顺序是: 在iPhone4、5、6 等系列,都是不需要带上@2x/

2016-07-09 17:02:06 4485

原创 iPhone的设置中,找不到“开发者选项”

一般情况下,当使用 iphone 连接到 Mac ,并打开 XCode 时,iPhone 的设置中会自动出现“开发者选项“。 如果打开 XCode 时,仍然找不到“开发者选项“,那么可能原因是: XCode 版本太低。可通过如下路径: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupp

2016-07-08 19:28:15 33744

原创 SourceTree+OSChina 版本管理

步骤: (1)创建远程仓库 网址: http://git.oschina.net 点击 “+” 来创建新项目,如下图所示:(2)创建项目时,如下图: (3)创建好之后,显示如下: (4)打开 sourceTree,点击新仓库,从URL克隆 (5)将(3)中的URL粘贴到“源URL“位置,“目标路径“位置可以自己选择,“名称“一般就用项目名称,然后点击“克隆“,到此就将远程仓库与本地仓库关

2016-07-08 16:52:48 2038

原创 CocoaPods的安装和简单使用

一、CocoaPods简介 CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和第三方开源库的时间。 在使用CocoaPods之前,开发项目需要用到第三方开源库的时候,我们需要 (1)把开源库的源代码复制到项目中 (2)添加一些依赖框架和动态库 (3)设置-ObjC,-fno

2016-07-07 13:13:50 6697

原创 获取App素材

步骤如下(以咪咕阅读为例): 1、打开iTunes,先进入其中的App Store,然后在搜索框中搜索“咪咕阅读“,如下图: 然后获取“咪咕阅读App“。2、获取之后,点击我的应用,找到“咪咕阅读“,然后右键选择“在Finder”中显示,我们会发现一个名为“咪咕阅读 6.1.0.ipa“的安装包,不要直接双击打开,右键选择打开方式:归档实用工具,然后就可以获得一个同名的文件夹,在Payloa

2016-07-05 19:32:25 2836

原创 MAC中git命令自动补全

步骤如下: 1、下载git-completion.bash 或者直接使用SourceTree去clone到本地。 下载地址:https://github.com/markgandolfo/git-bash-completion2、从下载的git-bash-completion文件夹中,找到git-completion.bash,并将该文件拷贝到 ~/ 中(即将此文件复制到你自己的用户主目录中),

2016-07-05 12:44:48 3085 1

原创 判断一个链表是否为回文结构

题目:判断一个链表是否为回文结构。 要求:时间复杂度为 O(n),空间时间复杂度为O(1)。思路分析:回文链表的特点就是对称,那么要判断是否回文,就可以用两个指针指向对称的节点,看它们的数据是否一样。由于是单向链表,不能同时用两个指针,从头尾向内部遍历取值比较。且本题对空间复杂度也有要求,所以可用如下方法实现。 具体步骤如下: (1)先得到链表的中间节点; (2)从中间节点的下一个节点开始,

2016-07-02 20:31:19 3776

原创 去除整型数组中的重复数字

题目:如何把一个整型数组中重复的数字去掉。 分析:首先通过快速排序对数组进行排序,然后对排好序的数组经过一次遍历,将其重复元素通过交换,最终达到删除重复元素的目的。总的时间复杂度为 O(nlogn),空间复杂度为O(1)。下面借助c语言类库中自带的快速排序算法qsort,来实现排序。具体实现如下:#include <iostream>int comp(const void *a, const vo

2016-06-27 20:12:57 8332 1

原创 如何判定数组是否存在重复元素

题目:假设数组 array 有 n 个元素,元素取值范围是 1~n,如何判定数组是否存在重复元素? 方法一:对数组进行排序(可以用效率比较高的排序算法,如快速排序、堆排序等),然后比较相邻的元素是否相同。时间复杂度为 O(nlogn),空间复杂度为O(1)。下面借助c语言类库中自带的快速排序算法qsort,来实现排序。#include <iostream>int comp(const void *

2016-06-27 16:44:16 9860

原创 找出数组中唯一的重复元素

题目:数组 arr[N],1 至 N 这 N - 1 个数存放在 arr[N] 中,其中某个数重复一次,写一个函数,找出重复的数字。要求每个数组元素只能访问一次,不用辅助存储空间。 分析:由于题目要求每个数组元素只能访问一次,不用辅助存储空间,可以从原理上入手,采用数学求和法,因为只有一个数字重复一次,而数又是连续的,根据累加和原理,对数组的所有项求和,然后减去 1 至 N - 1 的和,即为所求

2016-06-26 20:49:30 4950

原创 判断整数 x 能否表示成 n(n >= 2)个连续正整数的和

题目:如何判断一个整数 x 是否可以表示成 n(n >= 2)个连续正整数的和。 思路分析: (1)假设 x 可以表示成 n(n >= 2)个连续正整数的和,那么数学表达式如下:x = m + (m + 1) + (m + 2) + … + (m + n - 1),其中 m 为分解成的连续整数中最小的那一个(且 m 是大于等于 1 的正整数),可推出 x = (2m + n - 1)*n/2,变

2016-06-25 22:14:49 4705 1

原创 如何计算出序列的前n项数据

题目:正整数序列 Q 中的每个元素都至少能被正整数 a 和 b 中的一个整除,现给定 a 和 b,如何计算出 Q 中的前几项?例如,当 a=3,b=5,N=6时,序列为3,5,6,9,10,12。思路分析:可以和归并排序联系起来,给定两个数组 A、B,数组 A 存放:3 x 1,3 x 2,3 x 3,… 数组 B 存放 5 x 1,5 x 2,5 x 3,… 有两个指针 i、j,分别指向 A、B

2016-06-25 20:06:06 1592

原创 找出数组中第二大的数

题目:如何找出一个数组中第二大的数。 分析:如果仅仅只考虑实现,而不考虑时间效率,可以首先通过排序算法,将数组进行排序,然后根据数据下标来访问数组中第二大的数。最快的排序算法一般为快速排序算法,但是其时间复杂度仍然为O(nlogn),根据下标访问需要遍历一遍数组,时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。如何只通过一遍扫描数组即可找出数组中第二大的数? 方法:通过设置两个变量来

2016-06-25 19:13:49 12711 3

原创 重排数组使得数组左边为奇数,右边为偶数

题目:给定一个存放整数的数组,如何重新排列数组使得数组左边为奇数,右边为偶数?要求:空间复杂度为O(1),时间复杂度为O(n)。 分析:采用类似快速排序的处理。可以用两个指针分别指向数组的头和尾,头指针正向遍历数组,找到第一个偶数,尾指针逆序遍历数组,找到第一个奇数,交换两个指针指向的数字,然后两指针沿着相应的方向继续向前移动,重复上述步骤,直到头指针大于等于尾指针为止。具体实现如下:#inclu

2016-06-25 16:57:52 4541 1

原创 找出数组中符合条件的数对的个数

题目:一个整型数组,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。 方法一:排序+二分查找。先对数组进行排序,然后遍历该有序数组,同时使用二分查找方法,查找对应的值是否存在(例如,有序数组中某元素值为a,那么在该有序数组中,使用二分查找方法,来查找(N+1- a)是否存在)。方法二:排序

2016-06-25 16:00:07 5877

原创 找出数组中出现奇数次的元素

题目:给定一个含有n个元素的整型数组array,其中只有一个元素出现奇数次,找出这个元素。 分析:因为对于任意一个数 k,k^k = 0,k^0 = k,所以将array中所有元素进行异或,那么个数为偶数的元素异或后都变成了0,只留下了个数为奇数的那个元素。#include <iostream>int FindData(int arr[], int len){ int num = arr

2016-06-24 22:07:30 8430

原创 判断数组中的数字是否连续相邻

一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现。设计一个算法,当从该数列中随意选取5个数值时,判断这5个数值是否连续相邻。需要注意以下4点: (1)5 个数值允许是乱序的,如 8 7 5 0 6。 (2)0 可以通配任意数值,如8 7 5 0 6 中的 0 可以通配 9 或者 4。 (3)0 可以多次出现。 (4)全0算连续,只有一个非

2016-06-24 20:35:57 8286

原创 找出数组中出现次数超过一半的数(时间复杂度O(n))

题目:如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数。 由于本题对时间复杂度有要求,所以可采用以下2种方法。方法一:每次取出两个不同的数,剩下的数字中重复出现的数字肯定比其他数字多,将规模缩小化。如果每次删除两个不同的数(不管包括不包括最高频数),那么在剩余的数字里,原最高频数出现的频率一样超过了50%,不断重复这个过程,最后剩下的将全是同样的数字,即最高频数。此算法避免了排序,时间

2016-06-24 13:27:01 9052 3

原创 数组中重复次数最多的数

题目:如何找出数组中重复次数最多的数。 方法一:以空间换时间,即hash法。可以定义一个数组 int count[MAX],并将其数组元素都初始化为0;然后对原数组array[ ]进行遍历,并执行 count[ array[ i ] ]++ 操作;最后在count数组中找到最大的数,该数在count数组中对应的下标,即为array数组中重复次数最多的数。具体实现如下:#include <iostr

2016-06-23 22:24:51 5052

原创 两个有序整型数组的交集

题目:如何计算两个有序整型数组的交集? 例如,两个含有 n 个元素的有序(非降序)整型数组 a 和 b(数组 a 和 b 中都没有重复元素),求出其共同元素。 int a[ ] = {1, 2, 3, 4, 5}; int b[ ] = {1, 3, 5, 7, 9}; 那么它们的交集为{1, 3, 5}。计算数组交集可以采用很多种方法,但数组的相对大小一般会影响算法的效率,所以需要根据两个

2016-06-23 19:24:53 1526

原创 如何在排序数组中,找出给定数字出现的次数

题目:如何在排序数组中,找出给定数字出现的次数?例如,数组{1, 2, 2, 2, 3} 中 2 的出现次数是3次。思路分析:本题有多种解法。如取出该特定值,然后循环遍历该数组,统计该特定值出现的次数;或者使用 hash 法,来统计该特定值出现的次数。本文主要讨论在二分查找的基础上来解决该问题。设数组 array 为递增序列,需要查找的元素为findData,为了求解给定数字出现的次数,可以分别寻找

2016-06-23 15:07:32 1225

原创 二分/折半查找(递归+非递归)

二分查找法也称为折半查找法,它的思想是每次都与序列的中间元素进行比较。二分查找的一个前提条件是数组是有序的,假设数组array为递增序列,findData为要查找的数,n为数组长度,首先将n个元素分成个数大致相同的两半,取array[n/2]与将要查找的值findData进行比较,如果findData等于array[n/2],则找到findData,算法终止;如果 findData < array[

2016-06-23 14:40:18 708

原创 用递归算法判断一个数组是否递增

本题要求使用递归算法,设数组为array,则递归数组满足以下条件。 (1)如果数组长度为1,则该数组为递增,返回true。 (2)如果数组长度为n(n >= 2),则先比较最后两个元素是否递增,如果最后两个元素递增,则再递归比较除去最后一个元素的前 n-1 个元素是否递增。具体实现如下:#include <iostream>bool IsIncrease(int arr[],int len){

2016-06-23 10:50:01 8154 2

原创 用一个for循环打印出一个二维数组

思路分析: int array[row][column]; 首先,二维数组在内存中默认情况下是行存储的,所以可以将二维数组array看成一个一维数组,i 标识该数组在一维数组中的位置,则array在二维数组中的行号和列号分别为 [ i / column] 和 [ i % column]。 例如,arr[2][3] = {1, 2, 3, 4, 5, 6}; 数组元素对应的下标为 0,

2016-06-23 09:50:54 7123

原创 递归实现数组求和

如果使用递归,则需要考虑如何进行递归执行的开始以及终止条件。 (1)首先,如果数组元素个数为0,那么和为0。 (2)如果数组元素个数为n,那么先求出前 n - 1 个元素之和,再加上 arr[n - 1] 即可。此时可以完成递归功能。具体实现如下:#include <iostream>int sum = 0;int GetSum(int arr[], int len){ if (le

2016-06-22 21:19:10 4343

原创 统计字符串中每个字符出现的次数

题目要求:写出一个函数,查找出每个字符出现的次数,主要区分大小写,要求时间复杂度是O(n)。 分析:用256个元素的数组count,来分别记录ASCII码为0~255的字符的个数,初始化为0,遍历每个字符,对该字符对应的数组元素的值加1。最后count[ i ]中存储的数值就是字符 i 出现的次数。具体实现如下:#include <iostream>int main(int argc, const

2016-06-22 19:46:30 22027 2

原创 交换单链表中任意两个元素(不包括表头)

对于单链表而言,假设要交换的节点为A和B,那么在交换之前,建议先保存要交换节点的前后两个节点,可以减少错误率。(即分别保存A和B的直接前驱和直接后继节点--一般是4个节点) 需要注意的特殊情况: <1> 当A和B相邻时(假设A在前,B在后),此时需要做特殊处理,并且只需保存A的直接前驱节点和B的直接后继节点即可(共2个节点); <2> 如果A和B元素相同或A和B是同一个节点,就没有必要交换;

2016-06-22 16:13:41 958

原创 单链表排序(归并排序法)

我们已经在“ 单链表排序(冒泡排序法)“中探讨过怎样用冒泡排序法进行单链表的排序,但是在各种排序算法中,冒泡排序并非最高效的,对链表这一特定数据结构而言,最好使用归并排序算法。而堆排序、快速排序这些在数组排序时性能非常好的算法,用在只能“顺序访问“的链表中却不尽如人意(由于无法对链表随机访问,快速排序的的效果并不好,堆排序也是无法实现的),但是归并排序却可以,它不仅保持了O(nlogn)的时间复杂度

2016-06-21 10:17:15 3398 1

原创 合并两个有序的链表(非交叉)

题目:如何合并两个有序的链表(非交叉) 思路分析: 合并两个有序链表(假设链表元素为升序排列),一般可以采用递归和非递归两种方式实现。 第一种:递归方法 设两个链表(不带头节点的单链表)的首元节点分别为head1和head2,如果head1为空,则直接返回head2;如果head2为空,则直接返回head1。如果head1链表的第一个数据小于head2链表的第一个数据,则把head1链表的第

2016-06-21 10:09:00 895

MySQL必知必会

《MySQL必知必会》MySQL是世界上最受欢迎的数据库管理系统之一。书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握的知识,使他们不经意间立刻功力大增。

2016-05-22

C_Primer_Plus(第五版)中文版课后编程题全解

很好很详细,程序也很规范,可以下载看看,进一步提高自己编程能力

2014-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除