面试题 - 总结

本文详细介绍了平衡点和支配点的概念,并通过实例代码展示了如何寻找数组中的平衡点和支配点。包括平衡点问题的解决策略和支配点问题的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

require "rubygems"


##
#1.平衡点问题
# 平衡点:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点
#要求:返回任何一个平衡点
puts "平衡点问题" + "* " * 20

#初始化常量
numbers = [1, 3, 5, 7, 8, 25, 4, 20]
len = numbers.size - 1
head_sum = 0;tail_sum = 0
head= 0;tail =len

#开始计算
for i in 0..len
(puts "mid is :#{numbers[i]} sum is:#{head_sum}";break) if head_sum.eql?(tail_sum) and head_sum > 0
(head_sum += numbers[head];head += 1) if head_sum <=tail_sum
(tail_sum += numbers[tail]; tail -= 1) if tail_sum <= head_sum
end


##
#2.支配点问题:
#支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配数,其所在位序成为支配点;比如int[] a = {3,3,1,2,3};3为支配数,0,1,4分别为支配点;

puts "支配点问题" + "* " * 20

h_count = {} #用于存储数量
h_index = {} #用于存储位置
Hash
a = [3,3,1,2,3]
a.each_index do |i|
h_count[a[i]]=0 if h_count[a[i]].nil?
h_count[a[i]] += 1
h_index[a[i]] = [] if h_index[a[i]].nil?
h_index[a[i]] << i
end

list = h_count.sort {|a,b| b[1]<=> a[1]}
puts "支配数是:#{list[0][0]} 数量:#{list[0][1]}"
puts "支配点数:#{h_index[list[0][0]].join(",")}"



##
#3.最大公约数,辗转相除法
a,b = 5767,4453
... temp = a
... while temp:
... temp = a % b
... if temp == 0:
... print b
... else:
... print a,b
...
... a = b
... b = temp

最小公倍数:公式法
  可以证明,甲、乙两个自然数和它们的最大公约数与最小公倍数有如下关系:
  甲×乙=最大公约数×最小公倍数因此,可以根据公式:
  最小公倍数=甲×乙÷最大公约数来求两个数的最小公倍数。

##
#4.大数求余
原理将大数分开计算,按位计算
23 = 2*10 + 3
23%n = 2%n*10 + 3%n


d = 1232132131
f = 7
mod = 0
... for i in str(d):
... mod = mod * 10 + int(i)
... mod = mod % f
... print mod,f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值