随笔分类 - 算法
摘要:题目 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解法一 思路1 双指针
阅读全文
摘要:题目及说明 删除有序数组中的重复项 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路:双指针 定义一个快指针fast,一个慢指针sl
阅读全文
摘要:有效的括号 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 解法一 思路 后遇到的左括号总是先匹配右括号,先遇到的左括号总是后匹配右括号,符合栈先进后出的
阅读全文
摘要:最长公共前缀 题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 例如 输入:strs = ["flower","flaw","flight"] 输出:"fl" 解法一 思路 通过字符串比较的思路,以["flower","flaw","flight"]为例
阅读全文
摘要:罗马数字转整数 题目 罗马数字转整数 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 思路 如果从左到右是从大到小,那么全部加起来就好 否则,如果左边比右边大的,要把左边的数加一个负号 那么
阅读全文
摘要:回文数 题目 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 思路 反转x的后一半,然后和x的前一半比较,相等就是回文数(上一篇学过了反转) 怎么判断反
阅读全文
摘要:整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输
阅读全文
摘要:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums =
阅读全文
摘要:选择排序 选择排序,其算法的核心思想是:固定位置,选择元素,即:先从序列中,找到最小的元素,放在第一个位置,之后找到第二小的元素,放在第二个元素,以此类推,就可以完成整个排序工作了。 __author__ = 'kangpc' __date__ = '2020-12-2 0:34' # 选择排序 '
阅读全文
摘要:1. 常数阶 O(1) Temp=i; i=j; j=temp; 以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。
阅读全文
摘要:时间复杂度计算方法 1. 理论知识点 1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多
阅读全文
摘要:思路 /* 5 2 3 1 4 每次从底端开始和上一个比较,最小的升到顶端,最大的沉到底端 第1轮比较,比较4次,冒出来第一小的1 1 5 2 3 4 第2轮比较,比较3次,冒出来第二小的2 1 2 5 3 4 第3轮比较,比较2次,冒出来第三小的3 1 2 3 5 4 第4轮比较,比较1次,冒出来
阅读全文