zoukankan      html  css  js  c++  java
  • 记录2个算法知识(常见面试题)

    问题一

    Prime number (质 数)

      Given a positive integer number n. Determine whether n is a prime number or not. (You may implement your program in any programming language.)
      (给定一个正整数n。判断n是否是素数(你可以用任何编程语言来实现你的程序

      我当时给出的解答: 发现如果使用 111111111111529  这个大数;直接就卡死了;

    def is_prime(number):
      count = 0
      if number<= 1:
        print('不是')
      else:
          for i in range(1, number+1):
            if number%i==0:
              count+=1
      if count > 2:
          print(False)
      else:
          print(True)
    if __name__ == "__main__":
      # is_prime(6)
      is_prime(111111111111529)

    于是我给优化了一下;

    def isPrime(n):
        start_time = time.time()
        import math
        if n <= 1:
            return False
        for i in range(2,int(math.sqrt(n))+1,6):
            if n % i == 0 or n % i+2 ==0:return '不是质数'
        consume_time = time.time() - start_time
        return ['是质数',consume_time]
    
    if __name__ == "__main__":
      print(isPrime(2))

    上面两种方法的时间复杂度都是为 O(n); 但是面试官和我说 可以改成 O(1);我也是一脸懵逼;难道是用递归来弄么;如果有人可以用O(1)的时间复杂度来解决 请评论一下;让我涨涨见识;

    问题二

    2.Largest number

    # // 2.1 Given a list of non negative integers, arrange them such that they form the largest number. (You may implement your program in pseudocode or any programming language.)
      (给定一个非负整数列表,将它们排列成最大的数(您可以用伪代码或任何编程语言实现您的程序。

    def sum_number1(numList):
        '''
        ****给定的是一个list
        ****做一个非整数判断
        '''
        auxiliary = [str(i) for i in numList if str(i).isdigit()]
        if not auxiliary:
            return ''
        length = len(auxiliary)
        for index1 in range(length):
            for index2 in range(length - index1 - 1):
                if auxiliary[index2] + auxiliary[index2 + 1] < auxiliary[index2 + 1] + auxiliary[index2]:
                    auxiliary[index2], auxiliary[index2 + 1] = auxiliary[index2 + 1], auxiliary[index2]
        result = ''
        for index3 in range(length):
            result = result + auxiliary[index3]
        print(result)
    if __name__ == "__main__":
        # sum_number([1,29,'4123',59,'a'])
        sum_number1([19, 49, '3123', 59, 'a'])

    第二题的时间复杂度O(n^2);  

  • 相关阅读:
    成长型思维
    Spring Boot 入门详细分析
    我们为什么要学习 Spring Boot
    躲不掉的 lambda 表达式
    Java 并发工具包 | J.U.C
    Java 并发编程整体介绍 | 内含超多干货
    彻底搞懂单例模式如何安全的实现
    atomic 包、synchronized | Java 中线程安全
    AD在更新PCB的时候,每次封装都会改变位置?
    1206封装电容在物料可靠性设计比较低
  • 原文地址:https://www.cnblogs.com/rianley/p/14918786.html
Copyright © 2011-2022 走看看