经典算法思路总结

1、n 从 1 开始,每个操作可以选择对 n 加 1,或者对 n 加倍。如果最后结果为 2013,最少 需要()个操作

https://www.nowcoder.com/questionTerminal/5e27998c3f854109905610cac8a5d802?pos=73&mutiTagIds=602&orderByHotValue=1

 

 

2、给定一个字符串,返回其最长有效括号子串的长度

      ①有效的括号字符串是指只包含小括号,不包含其他字符,且满足括号语法规则的字符串。例如‘(())’是有效的,‘((a))’、‘(()’、‘{()}’是无效的

        ②有效括号子串是指输入字符串中满足有效括号字符串规则的子串。例如‘()(()()’的有效括号子串包括‘()’和‘()()’,其最长的有效括号子串长度即为4.

while 1:
    try:
        s = input()
        j = len(s)
        maxlen = 0
        stack = []
        for i in range(j):
            if s[i]==')' and len(stack)!=0 and s[stack[-1]] == '(':
                tmp=stack.pop()
                if len(stack) == 0:
                    maxlen = i+1
                else:
                    maxlen = max(maxlen,i-stack[-1])
            else:
                stack.append(i)
        print(maxlen)
    except Exception as e:
        break

 

3、链表插入排序:

https://www.jianshu.com/p/8d93f4c86cfd

 

4、背包问题

经典算法思路总结_第1张图片

 

5 二维有序矩阵找值

 -*- coding:utf-8 -*-
'''
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
'''
def search(array, num):
  # 参数合法性判断忽略
  i = 0
  j = len(array[0]) - 1
  max_i = len(array) - 1
  while i <= max_i and j >= 0:
    if array[i][j] == num:
      return True
    elif array[i][j] > num:
      j = j - 1
    else:
      i = i + 1
  return False
if __name__ == '__main__':
  a = [[1, 2, 8, 9],
     [2, 4, 9, 12],
     [4, 7, 10, 13],
     [6, 8, 11, 15],
     ]
  print search(a, 14)
  print search(a, 7)
  print search(a, 0)

 

 

你可能感兴趣的:(经典算法思路总结)