人生中第一次刷LeetCode,第一道Two Sum就各种拖了两三天才提交。打算一直用python来刷题,但是无奈没有系统学过Python,平时都是用啥搜啥。所以期间一直在补python的基础语法。
立下flag:每天两道算法题
按照前人们的经验,算法题就是找工作的敲门砖,没他不行,但是工作了之后用的不多。算法能力也是一种应试能力,勤能补拙。噗哈哈,可惜文豪同学最缺的就是“勤”,贪玩懒惰,执行力差,是我的特色标签,这个时候,博客小哥哥你就是我的超级监督者啦,一定要督促我把这个flag坚持到明年三月份哦~
先从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的区别?
xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表。
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: 负数的补码怎么求 ?
计算机中的负数是以其补码形式存在的,补码=原码取反+1,一个字节有8位 可以表示的数值范围在 -128到+127,用二进制表示也就是 10000000 - 01111111(注意:最高位表示符号),最高位是1的都是负数,最高位是0的都是正数。如-7 原码是 10000111 然后取反(最高位是符号位不用取反)得11111000,加一 得11111001,那么-7的二进制数就是 11111001。
Q: 多种方法解题?
(1)简单的步长为-1, 即字符串的翻转(常用);
(2)交换前后字母的位置;
(3)递归的方式, 每次输出一个字符;
(4)双端队列, 使用extendleft()函数;
(5) 使用for循环, 从左至右输出;