剑指offer第二版python3_剑指offer第二版(Python3)--面试题57 : 和为s的连续正数序列、和为s的数字...

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

面试题39 : 数组中出现次数超过一半的数字

面试题40 : 最小的k个数

面试题42 : 连续子数组的最大和

面试题43 : 从1到n整数中1出现的次数

面试题45 : 把数组排成最小的数

面试题49 : 丑数

面试题50 : 第一个只出现一次的字符

面试题51 : 数组中的逆序对

面试题52 : 两个链表的第一个公共结点

面试题53 : 在排序数组中查找数字

面试题55 : 二叉树的深度、平衡二叉树

面试题56 : 数组中数字出现的次数

面试题57 : 和为s的连续正数序列、和为s的数字

第6章 面试中的各项能力

第7章 两个面试案例

题目描述

牛客网

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

解题思路

使用双指针前后夹逼,以数组[1, 2, 4, 7, 11, 15]为例,s=15。

第一个指针指向1,第二个指针指向15。发现两数之和为16,大于15,因此第二个指针后退一步,指向11;

此时两数之和为12,小于15,因此第一个指针前进一步,指向2;

此时两数之和为13,小于15,因此第一个指针前进一步,指向4;

此时两数之和为15,返回指针指向的数字,结束。

实战

def sequenceSum(lst, tsum):

if not lst or tsum <= lst[0]:

return -1

start, end = 0, len(lst) - 1

while start < end:

sums = lst[start] + lst[end]

if sums < tsum:

start += 1

elif sums > tsum:

end -= 1

else:

return [lst[start], lst[end]]

return -1

题目描述

牛客网

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

解题思路

使用一个窗口遍历数字,窗口大小是动态的。当窗口内数字和大于S时,从窗口尾部删除小的数字,当窗口内数字和小于S时,加入一个数字到窗口中,每次删除和加入数字后都需要判断窗口内数字之和是否等于S,若等于则保留此时窗口作为一个序列。

实战

代码中lst就是一个窗口,从1开始遍历数字直到 S // 2 + 1。

需要特别注意的是results.append(lst[:])这一行,如果改成results.append(lst)会出错,因为lst始终在变化,例如lst=[2, 3, 4]时执行这一句results.append(lst),那么results中就是[[2, 3, 4]],但是之后lst.pop(0)后,lst变为[3, 4],此时results中也会跟着变为[3, 4]]。

class Solution:

def FindContinuousSequence(self, tsum):

# write code here

if tsum <= 1:

return []

results, lst = [], []

step = 0

sums = 0

while step < tsum // 2 + 1:

if sums < tsum:

step += 1

sums += step

lst.append(step)

while sums >= tsum:

if sums == tsum:

results.append(lst[:])

sums -= lst.pop(0)

sums -= lst.pop(0)

return results

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值