每日五问(1)

来源:互联网 发布:js实现excel上传文件 编辑:程序博客网 时间:2024/05/21 06:30

【NO1】 leetcode第一题 Two Sum

给定一个数组,一个目标值。假定刚好有两个数字加起来为目标值,请返回这两个下标(e.g. list=[1,2,3,0], target=4,返回 [0, 2])
思路:

def twoSum(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: List[int]        """        #拷贝数组        numlist = nums[:]        #数组排序        numlist.sort()        #核心部分,分别设置左右两个指针,若此时指针所指数字和超过target,则右指针向左移,找更小的数字,同理若超过target,则左指针右移,找更大的数字,直至找到目标值        l = 0        r = len(nums) - 1        while (numlist[l]+numlist[r]) != target:            while (numlist[l]+numlist[r]) < target:                l = l + 1            while (numlist[l]+numlist[r]) > target:                r = r - 1       #找到相应数字在原数组中的下标志        i = nums.index(numlist[l])        j = nums.index(numlist[r])       #应对两个数字刚好相等的情况(e.g.  [0,1,2,0], target=0   应返回[0,3], 若不做检查  则会返回[0,0]是错误的)        if (j == i):            j = nums.index(numlist[l], i+1)        return [i, j]

【NO2】读代码段,判断输出

def multi():    return [lambda x: x * y for y in range(3)]for m in multi():    pirnt (m(2))#print 444

【NO3】读代码段,判断输出

def arg(val, lst=[]):    lst.append(val)    return lstprint (arg(10))print (arg(20))#print[10][10, 20]

【NO4】读代码段,判断输出

lst = [[]] * 3     #[[], [], []]lst[0].append(2)print (lst)        #[[2], [2], [2]]

【NO5】快速排序

快排思想  {1, 8, 7, 55, 0, 11, 2}->{0, 8, 7, 55, 1, 11, 2}->{0, 1, 7, 55, 8, 11, 2}->{0, 1} | {7, 55, 8, 11, 2}->       | {2, 55, 8, 11, 7}->       | {2, 7, 8, 11, 55}->       | {2, 7} {8, 11, 55}->               |{8} {11, 55}
思想就是单次排序后,使数组分为两部分,左半部分均小于flag值,右半部分均大于flag值,然后两半部分再迭代进行单次排序直接上实现代码:#单次排序def quick(lst, left, right):    flag = lst[left]    while (left < right):        while (lst[right] > flag):            right = right - 1        if (left < right):            tmp = lst[right]            lst[right] = lst[left]            lst[left] = tmp            left = left + 1        while (lst[left] < flag):            left = left + 1        if (left <  right):            tmp = lst[left]            lst[left] = lst[right]            lst[right] = tmp            right = right - 1    return left#递归部分def quickSort(lst, left, right):    if (left >= right):        return    else:        mid = quick(lst, left, right)        quickSort(lst, left, mid)        quickSort(lst, mid+1, right)
0 0
原创粉丝点击