技术面试
haidixipan
这个作者很懒,什么都没留下…
展开
-
算法中的小技巧trick汇总
1. 数字&(数字-1)可以将数字的二进制表现形式去掉最低一位的“1”2.数组下标,可以被利用起来进行复杂度位O(n)的排序,前提是要排序的数字要在一定范围内,且空间复杂度没有要求3.判断一个单项链表是否有环,可以设计双指针便利整个链表,一个步进1,一个步进2,二者如果二者相遇,那么就可以证明有环,否则一直到结束都没有相遇则证明无环证明:步进1的假设位小A,步进2的假设为小B,小B先跑进环(跑进后就一直在环里循环了),如果小B跑了N步,后小A进环,则他俩能否相遇呢?答案是肯定的,小B跑的原创 2022-01-19 16:15:30 · 290 阅读 · 0 评论 -
38.leetcode38 Count and Say
本题难度为easy,给了5个字符串,根据规律推测出后续行数的字符,题目要求输入行数返回当行字符。答案里面讲输入行数分成了3类,1.如果为0返回空字符2.如果小于等于5直接返回已有字符3.大于5后开始每行按照规律计算,直到输入行数并返回值38.Count and SayEasy12839542Add to ListShareThe count-and-say sequence is the sequence of integers with the first five term.原创 2020-06-30 16:13:34 · 141 阅读 · 0 评论 -
25.leetcode 25 Reverse Nodes in k-Group
本题是一个hard链表翻转问题,关键点如下:1.子链表翻转,需要有一个头节点指引返回结果的head2.题目有空间要求,合适的做法是先计数再做子链表翻转代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass So原创 2020-06-16 11:46:41 · 114 阅读 · 0 评论 -
37.Sudoku Solver
这道题是一道数独结题,是36题的延伸。考点一:需要有三个集合分别存储每行、每列、每个小九宫格已经存在的数字供后续判断是否要填充考点二:判断有效性,需要有一个函数判断填充的数字是否有效,影响范围只有上述三个字典,因此需要遍历0~9,找到和三个字典里的数字不冲突的第一个数字即可。(找到第一个合适的就可以,不用考虑是否会对其他位置的数字有影响)考点三:提升性能学会使用递归上代码:import collectionsclass Solution(object): def solveSu..原创 2020-06-11 17:02:24 · 108 阅读 · 0 评论 -
LEETCODE刷题榜
2.leetcode2 Add Two Numbers链表相加3.leetcode3 Longest Substring Without Repeating Characters4.leetcode4 Median of Two Sorted Arrays5.leetcode 5. Longest Palindromic Substring最长回文子串6.leetcode6. ZigZag Conversion7.leetcode 7. Reverse Integer8.leetco原创 2020-06-10 10:14:33 · 188 阅读 · 0 评论 -
leetcode 36. Valid Sudoku
本题判断数独题,难度medium,行和列单独设置一个字典好判断,九宫格号如何计算时本题难点。根据数字下标我们发现,行号/3 * 10 + 列号/3*100可以把九宫格区分开来,然后再判断九宫格里有无此数字即可,详见代码。Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated accor...原创 2018-04-28 14:11:29 · 111 阅读 · 0 评论 -
1.内容推荐系统的建模过程和特征的选择方法
内容推荐系统的目标是将用户感兴趣的内容推荐给用户。一、建模过程基于内容的推荐系统面临的问题有1.怎么从海量级物料中挑出用户感兴趣的内容 2.用户最感兴趣的内容如何第一时间呈现给用户问题1,1)利用统一的标签体系,将用户和物料分别打标签,然后从海量视频中捞出与用户标签相符的物料2)利用itemCF,通过用户当前与历史场景下喜欢的内容,找出他们的相关的内容问题2,1)将问题...原创 2018-10-16 11:25:58 · 912 阅读 · 0 评论 -
3.L1和L2的区别;L1为什么能稀疏矩阵L2不能;L2为什么能解决过拟合
1.L1和L2的区别L1:预测值与实际值差值的绝对值之和L2:预测值与实际值差值的平方之和 2.L1为什么能稀疏矩阵L2不能:参考链接:https://blog.csdn.net/autocyz/article/details/76511527,矩阵指的是模型参数组成的矩阵,稀疏是指模型参数很多是0。为什么L1可以呢,从一个特征的模型来观察,损失函数为 F(w)=f+ ...原创 2018-10-19 19:36:41 · 1928 阅读 · 0 评论 -
2.bagging和boosting的区别
区别总结 Bagging Boosting 样本选择 有放回的选取 全量选取 样本权重 权重相等 错误率大的样本权重越大 分类器权重 权重相等 准确率...原创 2018-10-17 10:32:44 · 150 阅读 · 0 评论 -
leetcode 35. Search Insert Position
本道为easy,考察二分查找Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in ...原创 2018-04-26 11:00:04 · 75 阅读 · 0 评论 -
leetcode 34. Search for a Range
本题的解决思路是先找到target的开始位置,然后顺着开始位置找到结束为止,注意找开始位置的用法Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.Your algorithm's runtime comple...原创 2018-04-25 10:44:01 · 92 阅读 · 0 评论 -
leetcode 260. Single Number III
本题的思路是寻找一组数种出现一次的两个数,此题有如下特点:1.数异或自己等于02.两个不一样的数异或不为0具体思路看代码Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two...原创 2018-04-20 17:13:42 · 115 阅读 · 0 评论 -
leetcode 33. Search in Rotated Sorted Array
循环递增数组有一个性质:以数组中间元素将循环递增数组划分为两部分,则一部分为一个严格递增数组,而另一部分为一个更小的循环递增数组。本题的思路每次二分查找,判断target在一侧有序的数组还是在无序的数组里,在判断有序数组里一定要记着比较数组最大和最小值。Suppose an array sorted in ascending order is rotated at some pivot unkno...原创 2018-04-20 10:03:31 · 112 阅读 · 0 评论 -
leetcode28. Implement strStr()
easy题,考虑一下异常就可以了Implement strStr().Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Example 1:Input: haystack = "hello", needle = "ll"Output: 2...原创 2018-04-12 17:13:30 · 77 阅读 · 0 评论 -
leetcode 31. Next Permutation
本题借用乔的解题思路:题意为:比如给你个列表是[1,2,3,4],它的值就是1234,你要找到这四个数字能排出来的刚刚大于1234的数,也就是1243。如果给的是4321,没有比它更大的,就返回最小的也就是1234Implement next permutation, which rearranges numbers into the lexicographically next greater ...原创 2018-04-18 11:25:13 · 113 阅读 · 0 评论 -
3.ROC,准确率、召回率
ROC曲线一般用于分类问题,衡量分类模型好坏的一个指标首先对样本进行如下划分 预测真 预测假 实际真 TP(True Positive) FN(False Negative) 实际假 FP(False Positive) ...原创 2018-10-22 17:38:33 · 303 阅读 · 0 评论 -
5.RNN原理
一.RNN 循环神经网络(RNN, Recurrent Neural Networks) 参考链接:https://blog.csdn.net/heyongluoyao8/article/details/48636251构成:输入层,隐藏层(多个),输出层特点:1.隐藏层间的节点是可以互联的(包括自己和自己互联)2.输出层可以作为隐藏层的输入3.隐藏层可以跨层连接用途:...原创 2018-10-23 20:33:58 · 220 阅读 · 0 评论 -
6.随机森林,GBDT,Adaboost
参考链接:https://blog.csdn.net/lyf52010/article/details/798223821.随机森林,属于bagging的一种(bagging与boosting的区别见:https://blog.csdn.net/haidixipan/article/details/83105932),即 1)从样本中有放回的采样 2) 从特征中随机选取...原创 2018-10-26 11:20:34 · 193 阅读 · 0 评论 -
19.有哪些文本表示模型,他们各有什么优缺点
1.词袋模型/N-gram每篇文章表示成一个N维向量,每一维度表示一个单词,值为这个词对这篇文章的重要程度,计算公式为:TF-IDF(t,d) = TF(t,d)*IDF(t)其中,TF(t,d)为单词t在文档d中出现的频率,IDF(t) = log(文章总数/(包含单词t的文章总数+1)) ,IDF公式可理解为如果一个词出现的文章数越多那么说明它越是一个通用词,通用词对文档内容贡献度...原创 2018-12-04 13:58:33 · 1598 阅读 · 0 评论 -
18.如何验证求目标函数梯度功能的正确性
给定优化问题:,假设已经用代码上线了求目标函数值和求目标哈桉树梯度的功能,请问,如何利用求目标函数值的功能来验证求目标函数梯度的功能是否正确?根据梯度的定义,目标函数的梯度向量为:,其中每一个元素为目标函数(优化函数)对这一模型参数求的偏导数。回顾一下偏导数的定义: ,即函数L(\theta )在这点的斜率,ei为维度与\theta 一样的向量,只有在i这个维度为1,其余为0。...原创 2018-11-23 18:04:20 · 1094 阅读 · 1 评论 -
17.LDA与word2vec区别
LDA涉及到的数据知识不是一般的多,这里不做详细阐述,可参考如下博客:https://blog.csdn.net/v_july_v/article/details/41209515总的来说LDA与word2vec区别如下:区别 LDA word2vec 输出 文档-主题概率分布矩阵和主题-词概率分布矩阵 词对应的词向量 训练方法 利用文档中单词的贡献关...原创 2018-11-21 19:46:41 · 2093 阅读 · 0 评论 -
16.Word2Vec是如何工作的
Word2Vec是一种比较常用的词嵌入模型,它实际是一种浅层的神经网络,有两种网络结构,分别是CBOW和skip-gram.CBOW的目标是根据上下文出现的词语来预测当前词的生成概率;而skip-gram是根据当前词来预测上下文中各词的生成概率,看起来两种网络结构是互为镜像的,如下图。 由上图,两种网络模型都可以表示成输入层、映射层与输出层。w(t)为当前词,w(t-2)、w(t-1...原创 2018-11-19 11:48:32 · 306 阅读 · 0 评论 -
15.xgboost步长如何设定
xgboost的步长即是parameter里的eta(learning rate),官方对它的定义如下:eta [default=0.3, alias: learning_rate]Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get...原创 2018-11-16 11:33:53 · 1329 阅读 · 1 评论 -
14:回归类问题阈值如何确定
在用逻辑回归做潜在用户挖掘时,阀值(Z)的选取是一个头疼的问题。取太高,查全率虽然高了,但是查询条件过于严格,挖掘出的潜在用户过少。取的太低,资源浪费的太多。对于一般的营销而言,这个问题很好解决,只要按照预算,从高往下选取就可以了。但对于其他没有预算约束的情况就比较麻烦。希望下面的公式可以给予一些启发Z=Ln((qc)/(QC))q-发生显性结果的先验概率,比如信用卡用户发生违约的以往概率...转载 2018-11-14 20:33:19 · 8720 阅读 · 0 评论 -
13.解决样本不均衡问题
实际工作中经常遇到样本不均衡问题,比如某P2P平台预测用户信誉,1为信誉良好,0为有违约记录,样本采集下来为1的样本占绝大多数(比如90%),此时如果你用分类模型,目标函数是准确率,那么即使你全部预测为1,那么准确率也为90%,会极大的影响模型效果。因此在我们在训练模型之前,先要处理样本均衡的问题,总结方法如下:1.上下采样:上采样为增加小众样本数量(一份数据复制多份),下采样为减少大众样...原创 2018-11-07 16:05:02 · 714 阅读 · 0 评论 -
9:极大似然估计
极大似然估计,也叫最大似然估计,是参数估计的一种方法,一般用来推测数据分布函数相关参数。极大似然估计步骤:1.先假设数据属于某一分布(正太分布、泊松分布等),得到概率分布函数2.对概率分布函数求导,另导数等于0(若有多处为0,选另样本点概率最大的参数),根据样本点数据,求参数值为什么叫似然:对于无法穷举的问题,可根据样本数据估计实际分布,不是真实但近似真实 以下参考wiki...转载 2018-10-31 15:03:38 · 932 阅读 · 0 评论 -
6.LSTM
LSTM(Long short-term memory)与RNN不同的是,在处理文本信息时,后者对间隔比较长的文本之间的关联处理的不够好,而LSTM网络相对RNN可以记住大段文本的有用信息。LSTM构成:1.遗忘门:首先决定丢弃哪些不重要的信息2.输入门:决定要保留哪些新的信息3.输出门:决定输出的状态LSTM详细的介绍如下文(转自:http://colah.github.io...转载 2018-10-24 15:41:10 · 208 阅读 · 0 评论 -
8.softmax
softmax为归一化函数,形式如下: for j = 1, …, K.如上式,softmax将元素限制在(0,1)范围内,特点是会凸显最大值并抑制远低于最大值的元素 Python使用numpy计算的示例代码:import numpy as npz = np.array([1....原创 2018-10-29 17:12:33 · 107 阅读 · 0 评论 -
leetcode 20. Valid Parentheses
本体的思路集中在理解题意和栈的关系,每当看到一个左括号,就压栈一个右括号,当遇到一个右括号,看一下此右括号是否和栈顶字符相同,相同则继续,否则一定是违规的。Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The ...原创 2018-03-29 16:47:05 · 95 阅读 · 0 评论 -
leetcode 18. 4Sum
本题可以套用3sum,在最外层多套用一层循环,详见代码Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of targ...原创 2018-03-29 16:17:16 · 138 阅读 · 0 评论 -
背包VS动态规划问题
动态规划实际上是一个局部贪心问题,在考虑是否把一个物品加入背包前,考虑:max(背包已有物品总价值,max(背包已有物品-此物品重量的物品总价值)+此物品总价值)。题目: 有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,每件物品数量只有一个,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?背包问题分为两步: 1...原创 2018-03-20 16:35:13 · 224 阅读 · 0 评论 -
leetcode 5. Longest Palindromic Substring最长回文子串
本题开始想到的是暴力搜索的方式,首先编写判断一个字符串是否是回文(这个相对容易),然后再写两个循环遍历字符串所有子串,但是这种方法超时了。网搜有很多种解决方案,如动态规划、中心扩展法,本文介绍的是后者。中心扩展法核心思想是:分开考虑奇数和偶数情况,然后从中心向两边扩展,找到最大的长度,记录起始位置与中心半径长度,根据半径找到最大回文子串。Given a string s, find the lon...原创 2018-03-14 11:44:06 · 101 阅读 · 0 评论 -
leetcode 12 Integer to Roman
本次题目较简单,也似乎没用到什么算法,直接看代码如下:Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.class Solution: # @param {integer} num # @return {strin...原创 2018-03-23 18:34:41 · 94 阅读 · 0 评论 -
leetcode4 Median of Two Sorted Arrays
本题难度为hard,要考虑全数组边界情况,可以转换为求两个有序数组第K个值。基本思想是,在排除一些边界条件后,两个数组分别通过二分查找(二分时间复杂度是log(m+n)),通过二分后数据的数量和K的大小来进行下一轮二分两个数组的起始、结束点与新K值的确定。自己二分没有写出来(一些边界总是没找全),在discuss里面看到如下python解法,很简洁,贴出来大家看。There are two sor...原创 2018-03-13 18:23:43 · 124 阅读 · 0 评论 -
leetcode 11 Container With Most Water(最大水容器)
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two ...原创 2018-03-22 23:37:31 · 149 阅读 · 0 评论 -
leetcode10 Regular Expression Matching
本题有用动态规划的,有用递归的,这里采用递归的方式,找的网上的一个解决方案。基本思想是,若p的第二个不是*,那么第一个字符必须相等(或p的一个为'.'),然后p和s各加一位继续递归比较若p的第二个是*,那么第一个字符必须和s的前n个相等,n可以while循环找到最后一个,然后再递归Implement regular expression matching with support for '.' ...原创 2018-03-19 13:28:09 · 158 阅读 · 0 评论 -
leetcode3 Longest Substring Without Repeating Characters
题目:Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with th...原创 2018-03-13 00:06:24 · 120 阅读 · 0 评论 -
leetcode2 Add Two Numbers链表相加
今早出的题,路上看了群里的小伙伴的思路,自己也码了如下code,没什么可说的,读懂题,知道链表结构就明白了80%You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes ...原创 2018-03-12 17:41:12 · 165 阅读 · 0 评论 -
leetcode 141 /142 判断链表是否有环&环入口
#个人认为问链表问题的公司做C/C++的偏多,纯python的不会问 #1.判断链表是否有环:#网搜思路:定义两个变量,一个每次走一步,另一个每次走两步,若链表有环,则他们最后必将在环内无止境循环,快的一定会给慢的套圈,因此他俩一定#会在某处遇到,这是这个问题的前提,了解这个就知道接下来解题思路了class Solution(object): def hasCycle(self, head...原创 2018-03-11 23:46:20 · 149 阅读 · 0 评论 -
快速排序的python实现与考点
快速基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。考点:1.时间复杂度:平均时间复杂度是O(n*logn),最快是O(n*logn),最差(每一次取到的元素就是数组中最小/最大的)O(n2)2.空间复杂度:最优O(log(n)),最差...原创 2018-03-10 23:14:24 · 220 阅读 · 0 评论