您的位置:首页 > 其它

leetcode简单题目两道(2)

2017-04-19 23:49 344 查看

Problem


Givenaninteger,writeafunctiontodetermineifitisapowerofthree.


Followup:


Couldyoudoitwithoutusinganyloop/recursion?


Code:


classSolution{
public:
boolisPowerOfThree(intn){
if(n<=0)return0;
intmax_pow3=log10(INT_MAX)/log10(3);
intmax_pow3_val=pow(3,max_pow3);
returnmax_pow3_val%n==0;
}
};


说明:


自己想了好一会,居然没想到对数,,汗,这个解决方法的巧在于int最大是INT_MAX,所以取log3(INT_MAX)得到3的最大次方,然后计算出来,对n取余即可


JavaCode:


publicclassSolution{
publicbooleanisPowerOfThree(intn){
doubleres=Math.log(n)/Math.log(3);
returnMath.abs(res-Math.rint(res))<0.0000000001;
}
}


说明:


其实和上面一样用的是对数,这就更加直接了,通过求log3(n)的结果,看与其最近的整数的差值满足几乎为0即可。



Problem:

Givenasinglylinkedlist,groupalloddnodestogetherfollowedbytheevennodes.Pleasenoteherewearetalkingaboutthenodenumberandnotthevalueinthenodes.

Required:

Youshouldtrytodoitinplace.TheprogramshouldruninO(1)spacecomplexityandO(nodes)timecomplexity.

Example:

Given1->2->3->4->5->NULL,return1->3->5->2->4->NULL.

Note:

Therelativeorderinsideboththeevenandoddgroupsshouldremainasitwasintheinput.Thefirstnodeisconsideredodd,thesecondnodeevenandsoon...

Code:

/**
*Definitionforsingly-linkedlist.
*structListNode{
*intval;
*ListNode*next;
*ListNode(intx):val(x),next(NULL){}
*};
*/
classSolution{
public:
ListNode*oddEvenList(ListNode*head){
if(head==NULL||head->next==NULL){
returnhead;
}
intcount=1;
ListNode*p,*q,*head1,*r,*tail;
head1=(structListNode*)malloc(sizeof(structListNode));
r=head1;
p=head;
q=p->next;
while(p!=NULL&&q!=NULL){
p->next=q->next;
q->next=NULL;
r->next=q;
r=q;
if(p->next==NULL){
tail=p;
}
p=p->next;
if(p!=NULL){
if(p->next==NULL){
tail=p;
}
q=p->next;
}
}
tail->next=head1->next;
returnhead;
}
};
说明:

一开始理解题目就错了,汗,看成交换奇偶了,想法是直接交换value;
指针初始化不会了,百度才知道的,汗;
没加tail指针,想直接用p作为head的最后一个指针,结果死循环了;
加了tail但是在q为NULL的时候没赋值,奇数个的时候会执行失败;
综上所述,太久没用c++了,都退化了呀。


实在是自己在写代码碰到瓶颈了,只能贴两道做过的题目了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: