人生中第一次刷LeetCode,第一道Two Sum就各種拖了兩三天才提交。打算一直用python來刷題,但是無奈沒有系統(tǒng)學(xué)過Python,平時(shí)都是用啥搜啥煌茬。所以期間一直在補(bǔ)python的基礎(chǔ)語法。
立下flag:每天兩道算法題
按照前人們的經(jīng)驗(yàn)彻桃,算法題就是找工作的敲門磚坛善,沒他不行,但是工作了之后用的不多邻眷。算法能力也是一種應(yīng)試能力眠屎,勤能補(bǔ)拙。噗哈哈耗溜,可惜文豪同學(xué)最缺的就是“勤”组力,貪玩懶惰,執(zhí)行力差抖拴,是我的特色標(biāo)簽燎字,這個(gè)時(shí)候,博客小哥哥你就是我的超級監(jiān)督者啦阿宅,一定要督促我把這個(gè)flag堅(jiān)持到明年三月份哦~
先從easy題的直接抄襲開始吧
- Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
**Note:
**You may assume that each input would have exactly one solution, and you may not use the same element twice.
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dict_buff = {}
for i in xrange(len(nums)):
x = nums[i]
if (target-x) in dict_buff:
return [dict_buff[target-x],i]
dict_buff[x] = i
Q: xrange與range的區(qū)別候衍?
xrange做循環(huán)的性能比range好,尤其是返回很大的時(shí)候洒放。盡量用xrange吧蛉鹿,除非你是要返回一個(gè)列表。
Q: 字典和哈希表的區(qū)別往湿?
- Reverse digits of an integer.
**Note:
**The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x>=0:
x = int(str(x)[::-1])
else:
x = -int(str(-x)[::-1])
return x if x < 2147483648 and x >= -2147483648 else 0
Q: 負(fù)數(shù)的補(bǔ)碼怎么求 ?
計(jì)算機(jī)中的負(fù)數(shù)是以其補(bǔ)碼形式存在的,補(bǔ)碼=原碼取反+1,一個(gè)字節(jié)有8位 可以表示的數(shù)值范圍在 -128到+127,用二進(jìn)制表示也就是 10000000 - 01111111(注意:最高位表示符號),最高位是1的都是負(fù)數(shù),最高位是0的都是正數(shù)妖异。如-7 原碼是 10000111 然后取反(最高位是符號位不用取反)得11111000惋戏,加一 得11111001,那么-7的二進(jìn)制數(shù)就是 11111001他膳。
Q: 多種方法解題响逢?
(1)簡單的步長為-1, 即字符串的翻轉(zhuǎn)(常用);
(2)交換前后字母的位置;
(3)遞歸的方式, 每次輸出一個(gè)字符;
(4)雙端隊(duì)列, 使用extendleft()函數(shù);
(5) 使用for循環(huán), 從左至右輸出;