常见算法题

时间复杂度:几次循环就是n的几次方的复杂度

1、判断1,2,3,4组成不同的三位数

for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i!=j) and (i!=k) and (j!=k):
                print (i,j,k)

2、判断一个字符串或数字是不是回文

s1 = input()
#s1 = raw_input()
# if not s:raw_
#     print('请不要输入空字符串!')
#     s = input('请重新输入一个字符串:')
s = str(s1)
a = len(s)
i = 0
count = 1
while i <= (a/2):
    if s[i] == s[a-i-1]:
        count = 1
        i += 1
    else:
        count = 0
        break
if count == 1:
    print('输入内容是回文')
else:
    print('输入内容不是回文')

3、字符串反转的几种方式
(1)使用字符串切片

result = s[::-1]

(2)使用列表的reverse方法

l = list(s)
l.reverse()
result = "".join(l)   #join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

(3)使用递归函数

s = 'ascdfv'
def func(s):
    if len(s) <1:
        return s
    return func(s[1:])+s[0]
result = func(s)
print result

4、素数(质数)判断

n = input("输入一个数:")
if n >1:
    for i in range(2,n):
        if (n % i) == 0:
            print (n,"不是质数")
            break
        print (n,"是质数")
else:
    print (n,"不是质数")

5、冒泡排序

l = input()
a = list(l)
for i in range(1,len(a)):
    for j in range(0,len(a)-i):
        if a[j] > a[j+1]:
            a[j], a[j+1] = a[j+1], a[j]
print(a)

冒泡的优化:

如果排序执行了一趟数据没有交换,那么说明列表已经是有序状态,可以直接结束算法:

def bubbel_sort(data):
    for i in range(len(data) - 1):
        exchange = False
        for j in range(len(data) - i - 1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
                exchange = True
        if not exchange:
            break

6、统计列表相同内容出现的个数

def counter_num(List):
    #定义一个字典
	counter={}
	for i in List:
	     #List.count(i)统计列表元素对应的个数
	    # if List.count(i) > 1:
	    counter[i] = List.count(i)
	print(counter)
if __name__ == '__main__':

    List = [1, 2, 3, 1, 2, 3,"python", 4,5,"python"]
    counter_num(List)

7、请写出一段python代码,实现删除一个list的重复元素(去重,面试经常考)

list = [1,1,2,2,3,3,4,4,2,1]
r = []
for i in list:
    if i not in r:
        r.append(i)
print r

8、快乐数(编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和, 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1, 那么这个数就是快乐数。)
示例:
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

n = input()
num = [n]
while n !=1:
    sum = 0
    for i in str(n):
        sum = sum + int(i)**2
    if sum not in num:
        num.append(sum)
    else:
        print False
        break
    n = sum
if n ==1:
    print True

9、二分查找法

def BinarySearch(array,t):
    low = 0
    height = len(array)-1
    while low < height:
        mid = int((low+height)/2)
        if array[mid] < t:
            low = mid + 1

        elif array[mid] > t:
            height = mid - 1
        else:
            return array[mid]
    return -1

if __name__ == "__main__":
    print (BinarySearch([1,2,3,34,56,57,78,87],51))

10、快速排序

a = [1,6,9,3,5,6,2,5,0]
for i in range(len(a)-1):
    minIndex = i
    for j in range(i+1,len(a)):
        if a[j] < a[minIndex]:
            minIndex = j
    if i != minIndex:
        a[i],a[minIndex] = a[minIndex],a[i]
print(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值