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-pointer
def 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 = None
class 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