leetcode
剑蝶ly
这个作者很懒,什么都没留下…
展开
-
leetcode第2题-Add Two Numbers
第二题相对于第一题较简单,主要考察的链表的操作,两个链表的相加操作。#includeusing namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};ListNode *addTwoNumbers(ListNode *l1,ListNode *l2原创 2015-03-25 17:05:36 · 749 阅读 · 0 评论 -
leetcode第38题-Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as原创 2015-06-14 10:51:27 · 794 阅读 · 0 评论 -
leetcode第137题-Single Number II
#include#includeint singleNumber(int* nums, int numsSize) { int count[32]={0}; int i,j,number=0; for(i=0;i<numsSize;i++) { for(j=0;j<32;j++) count[j]+=((nums[i]&(1<<j))!=0); } for(i=0;i原创 2015-06-04 15:10:29 · 828 阅读 · 1 评论 -
leetcode第70题-Climbing Stairsd
题目的意思是有n个台阶,每次只能上1或2个台阶,求出总共有几种上台阶的方法。分析:因为每次都只能+1或+2,最后的每一个n就是由1或2的组合组成。但是换一种思路, 我们对比一些斐波那契数列,1、2、3、5、8、、、、,即f(n)=f(n-1)+f(n-2)。如果第一步走了1个台阶,剩下的组合是f(n-1),如果第一步走2个台阶,则剩下的组合f(n-2),从而得到递推式f(n)=f(n-1)+f原创 2015-04-21 19:14:24 · 772 阅读 · 0 评论 -
leetcode第26题-Remove Duplicates from Sorted Array
本题也属于easy模式,题意是说去掉一个有序数组中的重复部分,而且不需要额外的开销,只能在初始数组中做文章。这种题目就有一种固定的套路,就是使用两个指标,一个向前走,一个断后,我定义的i就是取到数组中的每一个数,pos是去掉重复之后的位置。最后多说一句,一定要注意判断原数组是否为空啊,粗心马虎真的不可取,谨记!#include#includeint removeDuplicates(int原创 2015-04-21 15:55:16 · 787 阅读 · 0 评论 -
leetcode第27题-Remove Element
#include#includeint removeElement(int A[], int n, int elem) { if(n==0) return 0; int len=n; for(int i=0,pos=0;i<n;i++) { if(A[i]==elem) len--; else A[pos++]=A[i]; } return len;原创 2015-04-20 16:56:25 · 722 阅读 · 0 评论 -
leetcode第21题-Merge Two Sorted Lists
本题目是意思是把两个有序的链表合成一个有序的链表,考察了归并算法和链表的操作。代码也相对比较简单,简单说一下归并函数里三个指针的作用,sum是返回的第一个指针,cur是所要返回的链表里走到的位置,put是对于取到的l1或l2里的某一个指针节点。全部的可运行代码如下:#include#include#includestruct ListNode{ int value; ListNod原创 2015-04-16 17:09:27 · 780 阅读 · 0 评论 -
leetcode第203题-Remove Linked List Elements
题目要求:从一个链表中删除指定的元素。分析:首先要考虑链表的非空问题,我想这应该是判断链表和数组问题最首先要考虑处理的问题。其次是如果前几个元素都是与指定元素相同,也要做一次处理,使head指向(在非空的情况下)与指定元素不相等的第一个元素。注意:在这里我碰到了一个很可笑的问题,就是while里面循环的判断条件,应该让head!=NULL在前面,这样就能保证head->val的值的问题,一直在原创 2015-04-24 10:14:53 · 810 阅读 · 0 评论 -
leetcode第202题-Happy Number
说实话,如果不看别人的解答的话,这道题我也是没有思路,不知道该循环几次,也不知道循环的终止条件,后来才知道,【2-6】这个范围内的数字都不是happy number所以就有了终止条件,n>6就是终止条件,当n跳进这个范围内的时候就终止循环,最后就能判断是否是happy number了#include#includebool isHappy(int n) { while(n>6)原创 2015-04-23 16:09:03 · 928 阅读 · 0 评论 -
leetcode第19题-Remove Nth Node From End of List
本题比较简单,主要考察了单链表的创建与删除。 但是有一个问题需要着重的考虑,如何快速定位链表的倒数第n个节点。这就需要两个辅助节点,一个节点先走到正数第n个位置,然后两个辅助节点一块往后走,最后后面的节点的位置就是我们需要的倒数第n个节点。#include#includestruct ListNode//定义节点{ int value; struct ListNode *ne原创 2015-04-12 21:15:53 · 644 阅读 · 0 评论 -
leetcode第88题-Merge Sorted Array
题目的意思:合并两个有序的数组到第一个数组中,使合并之后的数组仍然有序,且假设第一个数组有足够的空间。解题思路:一开始遇到这个题目,我也是不顾一切的从头开始遍历,结果很麻烦,总是有一两个位置走不对,数组并不像链表那样插入一个节点这么简单,我们要解决的就是插入节点的位置问题。所幸,上网查了一下其他人的做法,突然想到了可以从后往前遍历,因为每个数组都是有序的,比较两个数组的最后一个位置的元素大小就原创 2015-04-22 15:44:17 · 1078 阅读 · 0 评论 -
leetcode第83题-Remove Duplicates from Sorted List
这道题与实现数组中的删除重复元素类似。我们来看一下具体的过程,首先要判断是否为空(在这个上面吃了大苦头),删除下一个相同的元素的时候要定义一个tmp元素,再free掉即可。#include#includestruct ListNode{ int val; ListNode *next;};ListNode *deleteDuplicates(ListNode *head原创 2015-04-22 09:45:44 · 954 阅读 · 0 评论 -
leetcode第12题-Integer to Roman
这是数字转换的第一道题,要求是把阿拉伯数字转换为罗马数字,基本的思想与罗马数字转换为阿拉伯数字差不多,就是提取几个关键的数字作为比较即可。#include#include#includechar *link(char *s1,char *s2){ int len1=strlen(s1); int len2=strlen(s2); for(int i=len1;i<len1+len2原创 2015-03-30 14:15:00 · 579 阅读 · 0 评论 -
leetcode第168题-Excel Sheet Column Title
本题目与前面的把序列字母转换为数字的题目正好相反,是把数字转化为对应的序列字母。首先是步骤:根据逐步求商先确定字母有多少个,再动态申请空间避免内存浪费*(s+size-i)就对应于s[size-i],从后往前逐步的给每个字母赋值即可。#include#include#includechar *convertToTitle(int n) { char *s; int fac=原创 2015-03-30 22:07:54 · 749 阅读 · 0 评论 -
leetcode第171题-Excel Sheet Column Number
这道题是把字符串类型的类似于表格的字母对应到数字,题目意思很简单,我一开始还很把每个字母映射到数字,后来看到别人用这个方法计算每个字母的值s[i]-'A',这么简单的方法不用简直是可惜。int titleToNumber(char *s) { int sum=0,i; int len=strlen(s); for(i=0;i<len;i++) sum=sum*26+(s[i]-'A原创 2015-03-30 14:20:40 · 790 阅读 · 0 评论 -
leetcode第9题-Palindrom Number
这是leetcode的第九题,相对来说比较简单,目的很简单,就是判断一个int型的数是不是回文数。但是有几点需要考虑:负数应该没有回文数,要加判断!要注意额外的空间申请问题。判断是否是回文数势必要对一个数进行反转,反转的时候就要考虑溢出的问题。实现的代码如下:#includebool isPalindrom(int x){ if(x<0) return false; el原创 2015-03-28 18:39:16 · 1135 阅读 · 0 评论 -
leetcode第1题-two Sum
很快我的研一上半学期就愉快的结束了,感觉每天都在忙,但是就看不到成果。转眼间就到了下学期,实习与论文的压力接踵而至,原来也接触过一部分的OJ,但是总体做的不是很深,所以利用这个机会,好好的把leetcode的题目做一做,检测一下自己的算法能力以及重新拾起丢掉的编程感觉。第一题是一个查找类型的题目,当我看到题目的时候,不就是找到两个下标嘛,直接双重循环,上代码:#include#include原创 2015-03-24 16:53:30 · 773 阅读 · 0 评论 -
leetcode第13题-Roman to Integer
这道题是把罗马数字转换为阿拉伯数字,转换的方法是:首先把每一个关键字母映射为阿拉伯数字,即I是1、V是5、X是10、L是50、C是100、D是500、M是1000.然后每一位的阿拉伯数字与其后面的(假如有的话)比较,如果不小于,则加上当前的数字,如果小于后面的数字,则加上两者的差,代码如下:#include#include#includeint romanToInt(char *s){原创 2015-03-28 09:43:21 · 786 阅读 · 1 评论 -
leetcode第53题-Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],Maximum Subarray原创 2015-06-15 19:35:31 · 642 阅读 · 0 评论