Week 2


Day 1


III = 3
XII = 12
XXVII=27.
しかし表現4の場合はIIIではなくIV
9はIXです.
VとXの前に来て、4、9
XはLとCの前40,90に来る
CはD,Mの前に来て,400,900
def roman_to_num(s):
  roman_numerals = {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000,
  }
  answer=roman_numerals[s[-1]]
  for i in range(len(s)-1, 0, -1):
    if roman_numerals[s[i]] <= roman_numerals[s[i-1]]:
      answer += roman_numerals[s[i-1]]
    elif roman_numerals[s[i]] > roman_numerals[s[i-1]]:
      answer -= roman_numerals[s[i-1]]
  return abs(answer)

Day 2

def more_than_half(nums):
    harf_n = len(nums) // 2
    set_list = set(nums)	
    for i in set_list:
        if nums.count(i)>=harf_n:
            return i
次のコードは、重複する数値の個数を計算し、最大の数値を出力します.
num_list= []
num_set= set(nums)
for i in nums:
	num_list.append(nums.count(i))
    return(max(num_list))

Day 3


sは、複数の括弧からなるStringパラメータである.
true/false、sが有効かどうかを返してください.
「(」、「)」、「[」、「]」、「{」、「}」の6種類があります.次の場合に有効です.
かっこを開始するには、同じカッコで終了します.かっこの順序は正しいです.
例:
s = "([)]"
return false
def is_valid(string):
  stack= []
  bracket = {"(": ")", "{": "}", "[": "]"}
  if len(string) == 1:
    return False
  for i in string:
    if i in bracket:
      stack.append(i)   
    elif len(stack) == 0 or bracket[stack.pop()] != i:
      return False
  return len(stack) == 0
ほかの方法
def is_valid(string):
	left = ['(', '{', '[']
	right = [')', '}', ']']
	stack = []
    for letter in string:
		if letter in left:
			stack.append(letter)
		elif letter in right:
			if len(stack) <= 0:
				return False
			if left.index(stack.pop()) != right.index(letter):
				return False
	return len(stack) == 0  

Day 4


numsは数字からなる配列です.
最もよく現れる数字をk個返してください.
nums = [1,1,1,2,2,3], k = 2
return [1,2]
def top_k(nums, k):
  num_count = {}
  result = []
  for i in nums:
    if i in num_count:
      num_count[i] += 1
    else:
      num_count[i] = 1 
  num_count = sorted(num_count.items(), key=lambda x: x[1], reverse=True)
  for i in range(k):
    result.append(num_count[i][0])
  return result

Day 5


def get_max_area(height):
  l = 0
  r = len(height) -1
  area = 0
  while l < r: 
      area = max(area, min(height[l],height[r]) * (r - l))
      if height[l] < height[r]: 
          l += 1
      else:
          r -= 1        
  return area 
別の答え
def get_max_area(height):
  result = 0
  for i in range(len(height)):
    for j in range(i + 1, len(height)):
      temp = 0
      w = j - i
      if height[i] <= height[j]:
        temp = height[i] * w
      else:
        temp = height[j] * w
    if temp >= result:
      result = temp
  return result