05 2021 档案
摘要:二分查找 一、引子 设想一个猜数字游戏,A从给定的区间中选择一个数字,B要猜这个数,如果B猜的数大了,就高速B猜大了,如果B猜的数小于A选择的数,就告诉B猜小了。理论上经过有限次的猜数后,B一定可以猜到这个数。 二、算法思想 通过上述猜数字游戏可以发现B每次猜数字时,其实都对给定的区间进行了压缩,最
阅读全文
摘要:区间贪心 一、区间不相交问题 问题描述:给出N个开区间(x,y),要求从这些开区间中选择尽可能多的开区间,使得这些开区间两两之间没有交集 例如:对于(1,3)、(2,4)、(3,5)、(6,7)来说,可以选出最多的三个区间(1,3)、(3,5)、(6,7) 这就是区间选择问题,所以在求解时,应该尽可
阅读全文
摘要:贪心 一:简单贪心 贪心算法通过把整个算法拆分成多个部分,并且让每个部分达到局部最优,从而使算法整体达到最优,为了验证该算法是最优的还需要对算法进行证明,一般采用数学归纳法或反证法,假设不能导致最优解,然后通过推导得出矛盾,从而证明最优。但是一般是很难做到严谨证明的,所以不要纠结对贪心算法最优的证明
阅读全文
摘要:递归(下) 一、全排列 把1~n这n个整数按某个顺序摆放叫这n个数的一个排列,全排列是指把这n个数所能形成的所有排列都列举出来,例如对1、2、3这个数,(1、2、3),(1、3、2),(2、1、3),(2、3、1),(3、1、2),(3、2、1)就是1、2、3的全排列。 现给出1~n,要求实现它的全
阅读全文
摘要:分治(递归) 一、递归 定义:通俗来讲递归就是一个函数反复调用自身,每次把函数的参数进行压缩,直到这个参数可以很便捷的带入函数得出结果,然后将这个结果不断向上返回计算上层函数,就形成了递归; 递归函数两个重要概念 递归边界:分解的尽头 递归式(递归调用):分解问题的主要方法 下面给出例子来理解递归
阅读全文
摘要:散列hash 一、散列的定义 定义:散列就是将元素带入一个函数进行计算从而得到一个整数,要求这个计算结果可以尽可能唯一的标识这个元素,而这个函数就是散列函数H,如果元素转换前是key,那么转换后就是整数H(key) 上面的定义可能很抽象,我尝试通俗解释一下,就是说我有若干个元素,这个元素可以是任意类
阅读全文
摘要:算法入门篇(简单的排序算法) 一、简单选择排序 对一个序列A中的元素A[1]~A[n],令i从1到n枚举,进行n躺操作,每次操作从待排序部分[i,n]中选择最小的元素令其与A[i]进行交换,这样就会形成当前有序区间[1,i],重复操作n趟后,所有元素有序 核心代码如下: for(int i=1;i<
阅读全文
摘要:题目:PAT算法题(B为乙级,A为甲级) B1015 分析题意,第一类人 德分,才分都大于H 第二类人 得分>H,L<才分<H 第三类人 L<德分<H,L<才分<H,德分>才分 第四类人 不达H线,德分小于才分 总分:德分+才分,四类人都按总分排序
阅读全文
摘要:题目:PAT每日算法 PAT题库:https://pintia.cn/problem-sets/994805260223102976/problems/type/7 B1012 B1018 B1041
阅读全文
摘要:PAT每日题集 如果盲目的刷leetcode的题对于算法的学习是没有帮助的,最近我购入了胡凡主编的算法笔记,打算从基础学起,这本教材的配套题多出自于PAT和codeup,我计划每天学习一小节然后刷一些PAT的习题,所以会把一些好的习题记录下来,供以后复习时查阅。而且编程语言也会改为408要求的C++
阅读全文
摘要:题目:删除链表的到数第N个结点(中等) 问题连接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 一、问题描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗?
阅读全文
摘要:题目:简化路径 题目链接:https://leetcode-cn.com/problems/simplify-path 一、问题描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统
阅读全文
摘要:题目:合并两个有序数组 题目链接:https://leetcode-cn.com/problems/merge-sorted-array/ 一、问题描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums
阅读全文
摘要:题目:删除排序链表中的重复元素(简单) 题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/ 一、问题描述 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只
阅读全文
摘要:题目:爬楼梯 一、题目链接:https://leetcode-cn.com/problems/climbing-stairs/ 二、问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例
阅读全文
摘要:题目:x的平方根(简单) 一、问题描述 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4输出: 2示例 2: 输入: 8输出: 2说明: 8 的平方根是 2.82842
阅读全文
摘要:题目:二进制求和 一、问题描述 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1"输出: "100"示例 2: 输入: a = "1010", b = "1011"输出: "10101" 提示:
阅读全文
摘要:题目:加一(简单) 一、问题描述: 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:digits = [1,2,3]输出:[1,2,4]解
阅读全文
摘要:题目:最后一个单词的长度(简单) 一、问题描述 给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s = "Hello World" 输出:5
阅读全文
摘要:题目:最大子序扣(简单) 一、问题描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 二、
阅读全文
摘要:题目:外观数列(简单) 一、题目描述 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) = "1"countAndSay(n) 是对 co
阅读全文
摘要:题目:搜索插入位置(简单) 一、问题描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5输出: 2 示例 2: 输入: [1,3,5,6], 2输出:
阅读全文
摘要:题目:删除有序数组中的重复项(简单) 一、题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例: 输入:nums = [0,0
阅读全文
摘要:题目:合并两个有序链表(简单) 一、题干: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 二、分析 一道经典的数据结构算法题,在本科数据结构学习中肯定可以学到。 算法思想:需要用到的数据,一个头节点用来存放结果链表,两个链表指针用于遍历已知的链表
阅读全文
摘要:题目:有效的括号(简单) 一、问题描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 例如: 输入:s = "()[]{}" 输出:true 输入:s = "
阅读全文
摘要:题目:最长公共前缀(简单) 一、题干 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 二、示例 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","raceca
阅读全文
摘要:题目:罗马数字转整数(简单) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 X
阅读全文
摘要:题目:回文数(简单) 一、题干: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 二、思考过程 基本想法:把这个整数从左向右遍历依次,然后再从右向左遍历
阅读全文
摘要:题目:两数之和(简单) 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 例: 输入:nums = [3,
阅读全文

浙公网安备 33010602011771号