leetcode:Divide Two Integers + …

来源:互联网 发布:睡了兄弟的女朋友知乎 编辑:程序博客网 时间:2024/04/30 02:07
Divide Two Integers:
这道题难度不是很大,主要是细节问题,大意是求两个数相除,不能用乘除法和取模。
思路就是被除数不断减去除数,直到被除数小于除数为止。加快效率的办法是位运算,除数不断左移(相当于不断乘2),找到刚好小于被除数的那个数,与被除数相减。此时答案ans+=(1<<k),其中k是除数左移的次数,即左移了k次,相当于减去了2^k个除数。
几个需要注意的点:
1、记得判断正负,我这里处理的办法是全部转为正数
2、负数最大值(-2147483648)的绝对值比最大正数还大,因此不能简单的取负号,不然处理后会得到0.
3、这个是个人犯二,a<<1只是得到一个左移一次的数,a本身没变,要a<<=1才是改变了a的值。


Substring with Concatenation of All Word:
题意是给出一个字符串S如wordgoodgoodgoodbestword
再给出一个字符串vector如{ "word", "good", "best", "good" }
找出S中的下标,使得从该下标开始的一个子串,可以包含vector中所有单词(任意顺序,但不能有其他字符),比如例子中,S[8]符合要求。单词长度固定。注意,符合要求的下标可能有多个。
主要思路是设置一个mapdict,里面记录了数组中每个单词出现的次数,再另开一个mapsheet,然后从前往后扫描S,遇到符合要求的,就把sheet对应元素加1,如果没超过dict中的计数,那么就看紧接着该词的下一个单词,是否符合要求,以此类推。

这样做是可以过的,不过看答案的时间效率分布图,好像有一种快了很多的方法,估计是这样的:比如上面例子中有一段是goodgoodgood,而vector中只有两个good,那么就设置一个判定,直接从第二个good开始往后扫描,这样应该可以节约一定时间。
阅读全文
0 0
原创粉丝点击