算法
算法
我是一言
记笔记,笔记,记…
展开
-
曾经学的那些表示时间复杂度的公式怎么来的?
1. 常数阶O(1)Temp=i;i=j;j=temp;以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。2. 线性阶a=0 ①b=1 ②for(i=1;i&l...原创 2020-11-30 01:09:00 · 103 阅读 · 0 评论 -
怎么计算时间复杂度?
时间复杂度计算方法1. 理论知识点1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。2.一般情况下,...原创 2020-11-23 00:24:00 · 1625 阅读 · 0 评论 -
选择排序
选择排序选择排序,其算法的核心思想是:固定位置,选择元素,即:先从序列中,找到最小的元素,放在第一个位置,之后找到第二小的元素,放在第二个元素,以此类推,就可以完成整个排序工作了。__author__ = 'kangpc'__date__ = '2020-12-2 0:34'# 选择排序'''在列表的第一个位置存放此队列的最小值。声明一个变量min等于列表的一个坐标值0,从第一个...原创 2020-12-08 00:36:00 · 53 阅读 · 0 评论 -
python 插入排序
核心思想将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数。即:序列的第一个元素,肯定是有序的,把第二个元素和第一个元素相比,插入到合适的位置,这样前两个元素就有序了,接着,把第三个元素插入到前面包含两个元素的有序列表中,以此类推,直至插完第n个数据。案例 把6插入到列表[3,5,8,10]正向思维‘’’6和10比,6<10,6和10交换位置,10的索引+1,结果3,5,8,6,106和8比,6<8,6和8交换位置,8,10的索引+1,结果3,5,6,8,1原创 2021-08-06 14:29:06 · 101 阅读 · 0 评论 -
算法_冒泡排序python+java实现
思路/*52314每次从底端开始和上一个比较,最小的升到顶端,最大的沉到底端第1轮比较,比较4次,冒出来第一小的1 15234第2轮比较,比较3次,冒出来第二小的212534第3轮比较,比较2次,冒出来第三小的312354第4轮比较,比较1次,冒出来第四小的412345*/时间复杂度T(n)=O(n^2)算法描述当我们遍历第...原创 2020-11-16 23:47:00 · 83 阅读 · 0 评论 -
leetcode - 1.两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0]...原创 2021-07-20 01:22:00 · 52 阅读 · 0 评论 -
leetcode - 2.整数反转
整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:...原创 2021-07-20 10:22:00 · 56 阅读 · 0 评论 -
leetcode - 3.回文数
回文数题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。思路反转x的后一半,然后和x的前一半比较,相等就是回文数(上一篇学过了反转)怎么判断反转数字的位数是否达到原始数字位数的一半?回想反转的过程,我们不断的将反转后的数乘以10,把原始数...原创 2021-07-21 17:33:00 · 97 阅读 · 0 评论 -
leetcode - 8.移除元素
题目移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解法一思路1 双指针left慢指针,left有两层意义,一个是记录nums的剩余长度,一个是指向比较后的有效数组(虚拟的,便于理解)的最右边的元素。right快指针,right指针遍历原输入数组,如果right对应的元素不等于原创 2021-08-10 11:04:22 · 75 阅读 · 0 评论 -
leetcode - 5.最长公共前缀
最长公共前缀题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。例如输入:strs = ["flower","flaw","flight"]输出:"fl"解法一思路通过字符串比较的思路,以["flower","flaw","flight"]为例,三个字符串的第一个字符和第二个字符都是一样的,在比较第三个字符的时候,a<i<o,...原创 2021-07-24 00:36:00 · 91 阅读 · 0 评论 -
leetcode - 4.罗马数字转整数
罗马数字转整数题目罗马数字转整数例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II思路如果从左到右是从大到小,那么全部加起来就好否则,如果左边比右边大的,要把左边的数加一个负号那么怎么判断是不是左边大于右边呢?遍历字符串,基准元素和右边相邻元素比,如果左边大于右边,就相加,...原创 2021-07-21 23:38:00 · 57 阅读 · 0 评论 -
leetcode - 6.有效的括号
有效的括号题目给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。解法一思路后遇到的左括号总是先匹配右括号,先遇到的左括号总是后匹配右括号,符合栈先进后出的原理。dic = {')': '(','}': '{',']': '['}遍历字符串s,...原创 2021-07-25 04:33:00 · 55 阅读 · 0 评论 -
leetcode - 7.删除有序数组中的重复项
author = ‘kangpc’date = ‘2021-8-9 18:07’题目及说明删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:双指针定义一个快指针fast,一个慢指针slow,快指针遍历数组1到n-1,如果数组长度为0,直接返回0,否则fast小于n:如果fast的元素和fast-1的元素相等原创 2021-08-09 20:05:19 · 51 阅读 · 0 评论