Leetcode开篇纪【1】

人生中第一次刷LeetCode,第一道Two Sum就各种拖了两三天才提交。打算一直用python来刷题,但是无奈没有系统学过Python,平时都是用啥搜啥。所以期间一直在补python的基础语法。

立下flag:每天两道算法题

按照前人们的经验,算法题就是找工作的敲门砖,没他不行,但是工作了之后用的不多。算法能力也是一种应试能力,勤能补拙。噗哈哈,可惜文豪同学最缺的就是“勤”,贪玩懒惰,执行力差,是我的特色标签,这个时候,博客小哥哥你就是我的超级监督者啦,一定要督促我把这个flag坚持到明年三月份哦~


先从easy题的直接抄袭开始吧

  1. 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: 字典和哈希表的区别?


  1. 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循环, 从左至右输出;

你可能感兴趣的:(Leetcode开篇纪【1】)