第一个拼装小玩具,一口气整完还挺爽的:
209. 长度最小的子数组用于寻找数组中和至少为s的最短连续子数组的长度
注意这个题是切割,不是随机选择,别想多了
法一:暴力解法,直接用两层for 循环1234567891011121314151617181920212223242526272829303132333435363738394041424344 #nums.sort() #默认升序,原地修改,不额外占用 #nums.sort(reverse=True) # 降序排序 #sorted_nums = sorted(nums, reverse=True) # 降序生成新列表 #sorted_nums = sorted(nums) # 升序生成新列表class Solution: def minSubArrayLen(self, target: int, nums: List[int]) -> int: l = len(nums) ans = l+1 for i in range(l): ...
二分法详解1 二分法 暴力法遍历有序数列:O(n),二分法(一种查找或确定函数根的方法)减少到O(logn),例如猜数游戏(二分猜测次数log_{2}n),若n=1e7,则只需要猜log_{2}10^7 =23.25次,向上取整24次,(一个亿27次)
理论背景:非线性方程求根,不用管
1.1 猜数游戏一个[1,100]内的数字,只需猜7次:
50?是。[1,100]二分,中位数50,下一步猜[51,100]75?否。[51,100]二分,中位数75,下一步猜[51,75]63?否。[51,75]二分,56?否。[51,63]二分,53?是。54?否。=54?是。这个数是54
1.1.1 猜数游戏代码 首先确定左端点和右端点,如果左端点<右端点就一直循环,不断更新中间值mid =(right+left)//2。如果目标点在左半区,右端点往中间靠right= mid,如果目标点在右半区, 左端点往中间靠left = mid+1,直到循环结束,左端点或者右端点就是 ...
Day1. 704. 二分查找、 27. 移除元素、 977.有序数组的平方今天总体很简单。
704、基础题,注意elif return 拼写;注意左闭右开re= len(nums),熟悉一个即可
27、注意优化时间复杂度,快慢指针第一个版本比较舒服,熟悉
977、熟悉官方给出的双指针二和三,尤其是最后一个兄弟的题解,两头往中间计算比较,注意空列表为n个(注意不要打错[]*n),背熟最后一个兄弟的题解
704.二分查找二分法:
判断target在不在数组中,在返回下标,无-1
易错点:
1、while循环时,L≤(<)R
2、num(middle)>target
right = middle - 1
循环不变量:
左闭右开
左闭右闭
左闭右闭区间:
123456789101112class Solution: def search(self, nums: List[int], target: int) -> int: le, re = 0, len(nums)-1 while le < re: ...
题目描述构建一个单向链表,链表中包含一组整数数据。输出链表中的所有元素。
要求:
使用自定义的链表数据结构
提供一个 linkedList 类来管理链表,包含构建链表和输出链表元素的方法
在 main 函数中,创建一个包含一组整数数据的链表,然后调用链表的输出方法将所有元素打印出来
输入描述包含多组测试数据,输入直到文件尾结束。
每组的第一行包含一个整数 n,表示需要构建的链表的长度。
接下来一行包含 n 个整数,表示链表中的元素。
输出描述每组测试数据输出占一行。按照顺序打印出链表中的元素,每个元素后面跟一个空格。
输入示例123451 2 3 4 563 4 5 6 7 8
输出示例121 2 3 4 53 4 5 6 7 8
提示信息数据范围:
1 <= n <= 1000;
代码注释程序结构:
1、链表节点类-存储数据内容和指向下一个节点的指针
2、链表类-管理整个链表,包含插入打印功能
3.、主程序-接受输入,创建链表并操作链表节点类
1234567891011121314151617181920212223242526272829 ...
清明时节,细雨纷飞,草木含情。在这个慎终追远的日子里,我们以最深的敬意缅怀那些为民族独立、人民解放而献出生命的先烈。他们用热血浇灌理想,以生命守护信仰,在黑暗中燃起希望的火炬,用脊梁撑起新中国的黎明。每一寸山河都铭记着忠魂的呐喊,每一缕春风都传递着不朽的精神。今日的安宁是先烈以青春换来的馈赠,我们将永远铭记他们的名字与功勋,让红色基因代代相传,让英雄的丰碑永远巍然矗立于民族记忆的苍穹。