Leetcode 算法题07

来源:互联网 发布:平安银行java外包 编辑:程序博客网 时间:2024/04/30 03:39

169. Majority Element

输入一个列表,找出其中出现次数超过列表长度一半的数

我的代码:

class Solution(object):    def majorityElement(self, nums):        """        :type nums: List[int]        :rtype: int        """        count = collections.Counter(nums)        for i in count:            if count[i] > len(nums)/2:                return i

大神的代码:既然占了代码一半,排序后中间的那个数肯定就是所求

class Solution(object):    def majorityElement(self, nums):        """        :type nums: List[int]        :rtype: int        """        return sorted(nums)[len(nums)/2]

167. Two Sum II - Input array is sorted

给一个排好序的列表和目标数,找出列表中相加得到目标数的两个数的索引

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

我的代码:第一次超时了,没有记录,这次是想了个不超时的思路,写得多了点

class Solution(object):    def twoSum(self, numbers, target):        """        :type numbers: List[int]        :type target: int        :rtype: List[int]        """        number = collections.Counter(numbers)        print(number)        keys = list(number.keys())        keys.sort()        print(keys)        for i in range(len(keys)):            if keys[i] > target:                return False            add = 0            while i+add <len(keys) and keys[i+add] + keys[i] < target:                add += 1            if i+add < len(keys) and keys[i+add] + keys[i] == target:                if add != 0:                    ans1 = sum(list(map(lambda x:number[x],keys[:i])))+1                    ans2 = sum(list(map(lambda x:number[x],keys[:i+add])))+1                    return [ans1,ans2]                elif add == 0 and number[keys[i]]>1:                    ans1 = sum(list(map(lambda x:number[x],keys[:i])))+1                    ans2 = ans1+1                    return [ans1,ans2]
大神的代码:自愧不如

# two-pointerdef twoSum1(self, numbers, target):    l, r = 0, len(numbers)-1    while l < r:        s = numbers[l] + numbers[r]        if s == target:            return [l+1, r+1]        elif s < target:            l += 1        else:            r -= 1 # dictionary           def twoSum2(self, numbers, target):    dic = {}    for i, num in enumerate(numbers):        if target-num in dic:            return [dic[target-num]+1, i+1]        dic[num] = i # binary search        def twoSum(self, numbers, target):    for i in xrange(len(numbers)):        l, r = i+1, len(numbers)-1        tmp = target - numbers[i]        while l <= r:            mid = l + (r-l)//2            if numbers[mid] == tmp:                return [i+1, mid+1]            elif numbers[mid] < tmp:                l = mid+1            else:                r = mid-1

387. First Unique Character in a String

输入一个字符串,找到第一个在字符串中没有重复出现过的字母的索引

Examples:

s = "leetcode"return 0.s = "loveleetcode",return 2.
我的代码:

class Solution(object):    def firstUniqChar(self, s):        """        :type s: str        :rtype: int        """        a=collections.Counter(s)        ans = []        for i in a:            if a[i] == 1:                ans.append(i)        if ans == []:            return -1        return min([s.find(j) for j in ans])
其他思路:

def firstUniqChar(self, s):        """        :type s: str        :rtype: int        """        letters='abcdefghijklmnopqrstuvwxyz'        index=[s.index(l) for l in letters if s.count(l) == 1]        return min(index) if len(index) > 0 else -1

237. Delete Node in a Linked List

删除节点

我的代码:感觉有时候出现的问题好蠢

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def deleteNode(self, node):        """        :type node: ListNode        :rtype: void Do not return anything, modify node in-place instead.        """        node.val ,node.next= node.next.val,node.next.next




原创粉丝点击