面试常见软件题

参考来源的博客有:**

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”

  1. new str+=i, i in range(len(str)-1,0)
  2. 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+
168
256256+
192
256256256*256=3232286465
list(map(int, str.split("."))

7. 使用最高效的算法,将一堆99以内的数排序

计数排序, 一种萝卜一个坑

  1. 顺序挖100个坑
  2. 每个坑里有这样的萝卜(具体数值)多少个
  3. 按坑顺序依次输出萝卜
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到尾的字符串
}                                              
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值