A
题目:7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
class Solution {
public:
int reverse(int x)
{
int k,i = 0;
long long y = 0;
int p = x;
while(p/10 != 0)
{
p /= 10;
i++;
}
p = x;
int h;
for(k=i;k>=0;k--)
{
h = p%10;
y += h * pow(10.0,k);
p /= 10;
}
if(y>2147483647 || y<-2147483648)
{
return (0);
}
return (y);
}
};
最开始,我使用了两次循环,第一次循环会统计出所输入变量的位数。并且,在开始定义变量时为了避免溢出而设置了long long类型的整型变量,内存占用较高,时间复杂度也比较高。所以运行时间过长,内存利用率低。
思路:
我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。
算法:
反转整数的方法可以与反转字符串进行类比。
我们想重复“弹出” x 的最后一位数字,并将它“推入”到 rev 的后面。最后,rev 将与 x 相反。
题目给出的答案
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
};
R
最近在网易上看吴恩达的机器学习,下面时有关机器学习的介绍:
https://study.163.com/course/courseLearn.htm?courseId=1004570029#/learn/text?lessonId=1050360369&courseId=1004570029
机器学习分为两类,监督学习和无监督学习。
在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签,我们需要据此拟合一个假设函数。与此不同的是,在非监督学习中,我们的数据没有附带任何标签,而是通过计算机的计算将数据分类。
在监督学习中,又有回归问题和分类问题两个概念。
在回归问题中,我们会预测一个连续值。也就是说我们试图将输入变量和输出用一个连续函数对应起来;而在分类问题中,我们会预测一个离散值,我们试图将输入变量与离散的类别对应起来。
T
机器学习课程表(知乎黄海广博士的分享)
3.1. 第一阶段:基础入门(3-6个月)
入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。在这个部分我介绍的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。
3.1.1. 吴恩达Cousera机器学习课程
Andrew Ng的机器学习课程(Machine Learning | Coursera)是很多人的启蒙课程,难度适中且完全免费。Coursera上总共有49285个人给出了评分,平均得分4.9分,满分5分。据我个人观察,大部分Coursera上的课程评分处于4-4.5分之间,能做到4.9分的课程寥寥无几。另一个值得关注的是,这门课有接近五万人给出评分,统计学知识告诉我们这个样本较大所以评分应该趋近于其真实值,比较可信。根据Freecodecamp的统计,这门课是所有在线Machine Learning课程中最受到大家好评的课程。另一个比较直接的观察是如果大家在知乎上搜索“机器学习如何入门?”,大部分答案都提到了Andrew的这门入门课程,所以这是一门绝对的口碑课程,详细讨论可以参考:微调:为何国人迷恋吴恩达的机器学习课?。
3.1.2. Python机器学习 & Introduction to Statistical Learning with R
在学习吴恩达的在线课程时,推荐同时阅读相关的机器学习书籍补充理论知识。我再次推荐这两本非常好的入门书籍,在我的专栏也有对于这两本书的介绍。
- Python机器学习(作者 Sebastian Raschka):这本书出版于2015年并多次再版,在亚马逊中国上我们可以找到影印版和翻译版。这本书去掉了大量的数学推导的部分,仅保留了机器学习的核心应用。阅读本书可以快速对如何使用Python机器学习框架Sklearn有一个基本的了解,可以很快上手开始工作。本书涉及的内容很广泛,虽然只有400多页,但内容涉及了数据预处理(Data Preprocessing), 维度压缩和核函数(Dimension Reduction & Kernel),评估方法如交叉验证,集成学习,情感分析,聚类,甚至还包括了神经网络和Theano。更多介绍:带你读机器学习经典(三): Python机器学习(Chapter 1&2)。除此之外,也想特别推荐最近新出的一本Python机器学习类书籍:《Hands-On Machine Learning with Scikit-Learn and TensorFlow》。
- Introduction to Statistical Learning with R(ISL):相信正在机器学习苦海中遨游的朋友们肯定都听过大名鼎鼎的The Element of Statistical Learning, 这本频率学派的统计学习“圣经”被大家叫做ESL。而ISL正是基于满足更广大阅读人群的目的而推出的;ISL是ESL的入门版,不仅大量的去除了繁复的数学推导,还加入了R编程的部分,方便大家可以尽快上手。这本书是我推荐书单第一名:ISL的电子版是免费的:点击下载。更多介绍:带你读机器学习经典(一): An Introduction to Statistical Learning (Chapter 1&2)
3.1.3. 周志华《机器学习》
周志华老师的《机器学习》也被大家亲切的叫做“西瓜书”。虽然只有几百页,但内容涵盖比较广泛。然而和其他人的看法不同,我建议把西瓜书作为参考书而不是主力阅读书。西瓜书因为篇幅的限制,涵盖了很多的内容但无法详细的展看来讲,对于初学者自学来说实际阅读难度很大。这本书更适合作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。
我个人建议的用法是在学习网课和阅读ISL遇到疑惑时可以参考西瓜书的相关章节,但入门阶段没有必要一章一章的阅读,建议在这个阶段只阅读前十章即可。
3.2. 第二阶段:进阶学习(3-6个月)
在这个阶段,你已经对机器学习有了基本的了解。如果你认真的阅读了ISL并上完了吴恩达的课程,我相信你已经在理论上明白了什么是线性回归,什么是数据压缩,对特征工程以及简单的回归/预测问题有了理论上的基础。这个时候最重要的就是进行实践!
3.2.1. Kaggle挑战赛/练习
Kaggle(Your Home for Data Science)在数据分析领域早已大名鼎鼎,甚至可以说是数据分析第一社区,前一阵子刚刚被谷歌收购。Kaggle上有很多很好的数据集和挑战赛,你可以尝试这些挑战取得名次,甚至拿到奖金,对于将来找工作也非常有帮助。而且Kaggle的另一大优势是网友会分享他们的经验和看法,你也可以提出问题让大家来帮你提出一些修正方法。
国内也有类似的平台,比如天池大数据竞赛,其他类似的平台还包括DataCastle。
使用Kaggle的目的主要是将技能落在实处,防止练就一身屠龙之技。机器学习最大的幻觉就是觉得自己什么都懂了,但等到真的使用时发现并不奏效,而Kaggle是一个低成本的应用机器学习的机会。
3.2.2. Sklearn文档学习
Sklearn(scikit-learn: machine learning in Python)是Python上最流行的机器学习/数据科学工具包,上文介绍的Python Machine Learning书中就大量使用Sklearn的API。和使用Kaggle的目的一致,学习的Sklearn的文档也是一种实践过程。比较推荐的方法是把主流机器学习模型Sklearn中的例子都看一遍。
Sklearn的文档是少数写的跟教程一样的技术文档,很具有阅读价值。举个简单的例子,假设你想学习Python中使用逻辑回归,就可以参考: Logistic Regression 3-class Classifier
Sklearn的文档不仅提供了练习数据、sklearn的相关代码实例,还提供了可视化图。
3.2.2. 周志华机器学习
再次提到周老师是因为西瓜书是值得常常翻看的一本书,在kaggle挑战和阅读Sklearn文档的过程中你还会时不时的遇到一些新的名词,比如流形学习(manifold learning)等。这个时候你会发现西瓜书真的是一本中级阶段大而全的书籍:)
3.3. 第三阶段(可选*):深度学习(3-6个月)
因为深度学习是当下的热点,很多公司都在寻找深度学习人才。虽然深度学习只是机器学习的一个子集,但有兴趣朝这个方向发展的朋友可以在完成以上学习后单独学习一下深度学习。
3.3.1. 吴恩达深度学习课程
吴恩达在八月份的时候通过Deeplearning.ai和Coursera平台推出了最新系列的五门深度学习课程(deeplearning.ai)。有条件的朋友可以通过Coursera学习获得证书,最近网易云课堂也上线了这门课的翻译版。如果想要上其中的课程,需要先注册报名「深度学习工程师微专业」 深度学习工程师微专业 - 一线人工智能大师吴恩达亲研-网易云课堂 - 网易云课堂,之后就可以分别点开每门课单独进行学习。
更多关于网易云课堂上深度学习课程的介绍可以看:如何评价网易云课堂上线的吴恩达Deep Learning课程?
3.3.2. Deep Learning - by Ian GoodFellow
深度学习这本书是由当下深度学习领域的几位领军人物所著,包含三大巨头之一的Bengio,还有教父Hinton来作序推荐。这本书的中文本翻译由张志华教授团队负责,在github上免费放出了翻译版本,印刷版也可以从亚马逊中国上买到。
英文版:Deep Learning
中文版:exacity/deeplearningbook-chinese
这本书的阅读建议:
- 为了补充基础可以阅读第1-5章其中也包含了一些数学知识
- 只关注主流神经网络知识可以阅读6-10章,介绍了DNN/CNN/RNN
- 需要进一步了解一些调参和应用技巧,推荐阅读11和12章
第13-20章为进阶章节,在入门阶段没有必要阅读。其实比较实际的做法是吴恩达的课程讲到什么概念,你到这本书里面可以阅读一些深入的理论进行概念加深,按章节阅读还是比较耗时耗力的。
3.4. 第四阶段:深入研究
恭喜你!如果你已经完成了上面的计划表,代表你已经有了相当的机器学习能力。这个阶段,最重要的就是不要贪多嚼不烂。如果你浏览知乎,会发现大家都说你必须读Elements of Statistical Learning, MLAPP之类的大部头。我承认阅读这样的书会有帮助,但在你有了一定的基础知识后,相信你已经知道自己需要接着做什么了也有了志同道合的朋友,我希望把选择权交还给你,而不是继续推荐成堆的课程和书籍。当然,如果你希望继续深入的话,中文可以继续阅读周志华老师的《机器学习》和李航老师的《统计学习基础》,英文可以入手《Elements of Statistical Learning》。在这个阶段,重点要形成成体系的知识脉络,切记贪多嚼不烂,切记!
S
机器学习概论,主要介绍了什么是机器学习,以及机器学习的一些常用术语https://www.jianshu.com/p/60b588d783c2