参考来源的博客有:**
https://blog.csdn.net/zcymz/article/details/73076996?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
1. 判断整数N是否为素数
for i in range(2, int(sqrt(N))):
if N%i==0:
return False
return True
2. 给一个数 N,把 2 到 N 之间的素数输出出来
for i in range(2,N+1):
if prime(i): print(i)
3. 写出三角状的 9*9 乘法表
for i in range(1, 10):
for j in range(1,i+1):
m=i*j
print("%d*%d=%d\t"%(j,i,i*j),end='')
print()
4. 求N的阶乘
递归方法
def factorial(n):
if n==1:
return n
else:
return n*factorial(n-1)
非递归方法
res=1
for i in range(1,n+1):
res*=i
1024的阶乘有多少个零:
也就是有多少个10,10=2*5,2因子(偶数)远多于5因子(5的倍数),看有多少个5因子:
1024/5=204个
1024/25=40个,(事实上25含有2个5因子,但是上面算有多少个5的时候已经重复计算过一次,所以这里只取一倍的5因子)
1024/125=8个,(事实上125含有3个5因子,但是上面算有多少个5,多少个25时的时候已经重复计算过两次,所以这里只取一倍的5因子)
1024/625=1个
total=204+40+8+1=253个零
5. 将字符串反转
str=”abcdefg“——“gfedcba”
- new str+=i, i in range(len(str)-1,0)
- c++可以直接更改字符值:a[i],a[a.size()-1-i]=a[a.size()-1-i],a[i]
6. 求出 IPV4 IP地址所对应的整数
比如 192.168.199.1 对应整数 3232286465
list(map(int, str.split(".")))
1+
199256+
168256256+
192256256256*256=3232286465
list(map(int, str.split("."))
7. 使用最高效的算法,将一堆99以内的数排序
计数排序, 一种萝卜一个坑
- 顺序挖100个坑
- 每个坑里有这样的萝卜(具体数值)多少个
- 按坑顺序依次输出萝卜
a=[1,2,3,42,5,2,63,74,3,2,7,5]
hash=[]
# 顺序挖100个坑
for i in range(100):
hash.append(0)
# 每个坑里有这样的萝卜(具体数值)多少个
for i in range(len(a)):
hash[a[i]]+=1
# 按坑顺序依次输出萝卜
for i in range(100):
while hash[i]!=0:
print(i,end=" ")
hash[i]-=1
# 输出结果:1 2 2 2 3 3 5 5 7 42 63 74
8. 海量数据的top K问题
内存足够大时可考虑hashmap,(分情况讨论,可参考其他博客)
9. 数组内是否有重复值
对于含有n个元素,每个元素值在1~n的数组
方法一:
先排序,在判断list[i]==list[i+1]?
方法二:
hashmap,确定键值对,输出值大于1的键
10. 字符串重复问题
python字典方法
str="absdjiss"
dic={}
for i in range(len(str)):
if str[i] not in dic.keys():
dic[str[i]]=1
else:
dic[str[i]]+=1
print(dic)
# output: {'a': 1, 'b': 1, 's': 3, 'd': 1, 'j': 1, 'i': 1}
for key,val in dic.items():
if dic[key]>1:
print(key,val)
# output: s 3
11. 递归实现字符串反转
#include <iostream>
#include <string>
using namespace std;
string recursReverse(string str )
{
int len=str.length() ;
if (len<=1) return str;
return recursReverse(str.substr( 1))+str.substr(0,1);
//substr(0,1)下表0开始取一个字符形成的串
//substr(1) 下表1到尾的字符串
}