36、數(shù)組中出現(xiàn)次數(shù)超過一半的數(shù)字
只會最笨的用字典遍歷計數(shù),然后判斷value是否大于長度的一半??戳讼聞e人的方法,參考思路來自博客:https://www.cnblogs.com/python27/archive/2011/12/15/2289534.html
自己用python實現(xiàn)。
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if not numbers:
return 0
else:
cur = [numbers[0], 1]
for i in numbers[1:]:
if i == cur[0]:
cur[1] += 1
else:
if cur[1] > 1:
cur[1] -= 1
elif cur[1] == 1:
cur = [i, 1]
print(cur)
return cur[0] if numbers.count(cur[0])>len(numbers)/2 else 0
37、整數(shù)中1出現(xiàn)的次數(shù)
多試幾個數(shù)字就能找到規(guī)律了。雖然我也試了很久。寫的比較長,但邏輯應該沒有什么錯誤,可能可以在代碼上進行改進。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
temp = str(n)
nums = [int(x) for x in list(temp)[::-1]]
count = 0
for i, num in enumerate(nums[:-1]):
pos = 10**i
pre = int(temp[:-(i+1)])
if num >= 1:
count += pos
count += pos*pre
if num < 1:
count += pos*pre
if nums[-1] > 1:
count += 10**(len(temp)-1)
else:
count += int(temp[1:])+1
return count
38、把數(shù)組排成最小的數(shù)
不會做,看了別人的思路。自己寫了一遍冒泡排序的過程。等看了排序相關內(nèi)容再重新用快排寫一遍
class Solution:
def PrintMinNumber(self, numbers):
def swap(i, j):
numbers[i], numbers[j] = numbers[j], numbers[i]
def sortbynumadd(numbers):
flag = True
i = len(numbers)
while i > 0 and flag:
flag = False
for j in range(i-1):
if int(str(numbers[j]) + str(numbers[j+1])) > int(str(numbers[j+1]) + str(numbers[j])):
swap(j, j+1)
flag = True
i -= 1
return numbers
rst = sortbynumadd(numbers)
return ''.join([str(x) for x in rst])
39、數(shù)組中重復的數(shù)字
簡單的直接用字典,時間空間復雜度都是O(n)。參考了別人的思路,時間復雜度O(n)空間復雜度O(1)
class Solution:
def duplicate(self, numbers, duplication):
long = len(numbers)
for i in range(len(numbers)):
index = numbers[i]%long if numbers[i] >= long else numbers[i]
if numbers[index] > long:
duplication[0] = index
return True
numbers[index] += long
return False
40、構造乘積數(shù)組
還是不會做。。參考https://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46
的第一條評論
class Solution:
def multiply(self, A):
B = [1]
for i in range(len(A)-1):
B.append(B[i]*A[i])
temp = 1
pos = -2
for j in range(len(A)-1, 0, -1):
temp *= A[j]
B[pos] *= temp
pos -= 1
return B
感覺今天的五道題大部分都不會做??。還需要繼續(xù)努力