Jaster_wisdom的专栏

待到山花烂漫时,她在丛中笑

k-means算法及python实现

本篇文章主要讲解聚类分析中的一种常用的算法k-means,它的全称叫作k均值算法。 k-means原理 k-means算法是一种基于原型的、划分的聚类技术。 基于原型可以理解为基于质心,也就是说,每个对象到定义该簇质心的距离比到其他簇质心的距离更近。当质心没有意义时,原型可以视为最靠近中心的...

2018-08-09 15:28:56

阅读数:57

评论数:0

LeetCode55. 跳跃游戏

题目大意:判断是否可以从数组的第一个位置调到最后一个位置,每次跳得步数必须小于等于当前位置上的值题目分析:使用贪心算法,每次选择最远能达到的地方,假设从某一点最远可以到达A点,那么A点之前的所有点都是可以到达的。所以我们只要不断的更新最远可达到的点,然后看是否最远的点超过了终点即可。具体来说,就是...

2018-06-14 19:48:20

阅读数:153

评论数:0

LeetCode40. 组合总和II

题目大意:给定一个数组,和一个目标值,找出数组中所有可以使数字和为target的组合。数组中的数字可以重复,并且每个元素只能使用一次。题目分析:本题和LeetCode39. 组合总和很类似,唯一的区别在于每个元素不能无限制地取。所以我们只要在递归的时候将参数改成从后一个元素开始递归。同时,同一位置...

2018-06-13 20:11:40

阅读数:382

评论数:0

LeetCode39. 组合总和

题目大意:给定一个数组和一个目标值,返回数组内可以使数字和为target的组合,注意数组内的数字可以重复选,但是组合的结果要求不能重复。题目分析:本题采用递归较容易解答。首先,将数组内的元素由小到大排序,然后不断地进行试探,直到和为target。若当前和小于target,则继续往里面加元素;若当前...

2018-06-13 19:31:59

阅读数:390

评论数:0

LeetCode53. 最大子序和 (动态规划/分治法)

题目大意:求出一个序列的最大子序和,顾名思义,就是一段最大的连续序列的和题目分析:本题可以用两种解法求解,动态规划或分治法法一:动态规划,用result[i]保存以数字nums[i]结尾的最大子序和,然后不断更新result数组的最大值即可。时间复杂度O(n)代码展示:class Solution...

2018-06-12 10:43:31

阅读数:1246

评论数:1

LeetCode41. 缺失的第一个正数

题目大意:找到一个未排序序列中的第一个缺失的正数。简而言之,就是看1在不在这个序列中,如果不在的话输出1;否则看2在不在这个序列中,如果不在的话输出2;否则看3在不在这个序列中……题目分析:本题的难点在于只能使用常数级别的空间,也就是说,不能开辟一个flag数组,若出现某个数,就将flag值标1,...

2018-06-12 09:23:15

阅读数:613

评论数:0

LeetCode12. 整数转罗马数字

题目大意:将一个1到3999范围内的整数转为罗马数字题目分析:首先熟悉转换规则,然后可以使用两个list存储对应的映射关系,然后每次从大到小看num是否大于1000,大于900,大于500,若在某个区间的话,就将罗马数字加进来,num减去相应的数值,直到num为0代码展示:class Soluti...

2018-06-11 20:10:26

阅读数:146

评论数:0

LeetCode47. 全排列 II

题目大意:给定一个含有重复元素的序列,返回这个序列所有不重复的全排列题目分析:与最基本的全排列递归算法相比,本题要对重复的元素进行特别的处理。例如序列“112”,第一个1和第二个1就不需要交换了,因为交换前后排列的序列是重复的。例如序列“211”,当“2”与第一个“1”交换了之后,变成第一个数字是...

2018-06-11 15:46:13

阅读数:167

评论数:0

Leetcode46. 全排列

题目大意:求出一个序列的全排列题目分析:全排列问题都可以用递归的方式来解决,将第一个数分别与后面的每一个数交换,然后对后面的数进行全排列。全排列问题的模板如下:#include <iostream> using namespace std; void ...

2018-06-10 22:01:36

阅读数:174

评论数:0

LeetCode50. Pow(x,n)

题目大意:实现一个计算机中求指数幂的操作。题目分析:我觉得这道题是不需要考虑大数问题的,因为如果幂取到2^30的级别,底数取2的话,这个结果是无法用float或double表示的。本题在计算过程中需要优化,常规的解法会出现内存不够的情况。我们知道,求a的n次方,可以用以下公式来表示:当n为偶数时,...

2018-06-10 12:40:56

阅读数:45

评论数:0

Leetcode28. 实现strStr()

题目大意:实现字符串匹配函数,即在文本串S中查找一个模式串P的出现位置,若不出现返回-1题目分析:暴力解法,将模式串P与文本串S一位一位的比较,若相同,则继续比较下一位;若不同,则将模式串P向后移动一位,继续往后比较。时间复杂度为O(m*n),假设文本串S的长度为m,模式串P的长度为n。代码展示:...

2018-06-10 10:34:52

阅读数:120

评论数:0

Leetcode33. 搜索旋转排序数组

题目大意:返回旋转排序数组中的值等于目标值的元素的索引题目分析:使用二分法查找。根据旋转数组的性质,将这个数组从中间切开,前后两个子数组必定有一个是按照升序排列的,我们在升序的子数组中判断是否存在等于目标值的元素,若没有,则在另一个部分查找。代码展示:class Solution(object):...

2018-06-09 21:26:03

阅读数:206

评论数:0

Leetcode34. 搜索范围

题目大意:给定一个升序的整型数组和一个目标值,找到这个目标值在数组中的开始和结束的位置题目分析:本题使用二分查找的思想,不断地取中间元素,比较它和目标值的大小。若中间元素的值比目标值小,则在后面的部分查找;若比目标值大,则在前面的部分查找。若相等,则在该中间元素前后试探是否还有和目标值相等的元素,...

2018-06-09 20:44:50

阅读数:66

评论数:0

LeetCode18. 四数之和

题目大意:在一个数字序列中找出不重复的四个元素,使得它们的和等于目标值target题目分析:本题和LeetCode15 三数之和思路基本相同,只要设置两重循环,先固定前两个数,后两个数的话,只要分别用两个指针指向剩余元素的一头一尾,若当前的和比target大,则后面的指针前移;若当前的和比targ...

2018-06-05 21:32:13

阅读数:104

评论数:0

LeetCode22. 括号生成

题目大意:给定n表示括号的对数,输出所有有效的括号的组合题目分析:递归求解,用leftnum和rightnum分别表示剩余可用的左括号和右括号的个数,当使用了一个( ,则leftnum-1; 同理,使用了一个 ),则rightnum-1。 当leftnum>0时,可用( 填充...

2018-06-05 20:43:32

阅读数:104

评论数:0

Leetcode21. 合并两个有序的链表

题目大意:给定两个有序的链表,要求给出合并之后的一个链表题目分析:鉴于两个链表是有序的,用两个指针分别指向各自第一个元素,将其中小的那个元素作为新链表的第一个元素,同时将指向较小元素的指针后移一格,直到指向两个链表的末尾。若有一个链表已经到了末尾,直接将另一个链表的元素添加进来即可。代码展示:cl...

2018-06-05 19:58:14

阅读数:298

评论数:0

Leetcode17. 电话号码的字母组合

题目大意:将给定的一个仅包含数字2~9的字符串 按照电话九宫格上数字与字母的对应关系 输出所有可能的字母组合题目分析:本题的难点在于数字字符串的长度是个变量,若是一个固定的几位数,那么就可以写几重循环,依次输出即可。我的解题思路是:首先将字符串中的每个数字对应成一个字母列表,按顺序将各个字母列表放...

2018-05-30 13:05:34

阅读数:548

评论数:0

Leetcode16. 最接近的三数之和

题目大意:找nums数组中的三个数,使它们的和最接近目标值target,并且只有一组解。题目分析:首先想到的是暴力解法,遍历出所有从数组中取不同的三个数的情况,比较它们与target的距离(可以用绝对值表示),然后将距离最小的一组的和输出即可。这种方法是超时的,简单分析一下,可以知道时间复杂度为O...

2018-05-27 14:22:34

阅读数:854

评论数:0

leetcode13. 罗马数字转整数

题目大意:将一个字符串表示的罗马数字转化成整数输出题目分析:从前往后扫描罗马数字,根据相应的键值对将每个字母表示的值相加即可。这里有两种情况:1.罗马数字中大的数字在小的数字的左边,这是正常的情况,只要将当前值累加到result中即可。 2.罗马数字中大的数字在小的数字的右边,只要将大的数字表示的...

2018-05-25 09:25:14

阅读数:57

评论数:0

leetcode15. 三数之和

题目大意:求出集合中三个元素之和等于0,并且无重复的三元组题目分析:本题直接用暴力搜索来枚举所有情况,时间复杂度为O(n^3),超时下面使用第二种方法,时间复杂度降到O(n^2):它的思路是先将集合中的元素从小到大排序,然后确定三元组中的第一个元素为集合中的第一个元素,然后用指针j,k分别指向第二...

2018-04-19 23:12:16

阅读数:286

评论数:0

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