
算法
XTY00
积少成多,比昨天更优秀。。。
展开
-
重拾算法1-字符串压缩
题目来源于力扣:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。#自己写的class Solution: def compressString(self, S: str) -> str: s = '' n1 = len(S) k = 1原创 2020-08-11 22:20:11 · 246 阅读 · 0 评论 -
算法题10---数组中找出重复的数字
力扣题目:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3自己的思路:弄两个指针,遍历数组,然后比较大小,相等即返回代码如下:def findRepeatNumber(nums): if len(nums)<0: .原创 2020-06-10 16:13:51 · 650 阅读 · 0 评论 -
算法题9-实现strStr()
力扣题目:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。方法一:class Solution: def strStr(self, haystack: str, needle: str) -> int: # if needle not in haystack: # ...原创 2020-06-10 14:59:36 · 279 阅读 · 0 评论 -
算法8---删除数组重复元素,并返回新数组长度
题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:遍历数组,发现两个值相等,移动指针,发现两个值不相等,互换位置保证指针走过的地方都是不重复的数def lennums(nums): if no nums: return 0 else: i = 0 for j in range(1,len(原创 2020-05-24 22:32:55 · 517 阅读 · 0 评论 -
算法7--反转链表
通过构建空链表,实现链表反转def reverse(head): pre = None #创建空链表 curr=head while curr: temp=curr.next curr.next=pre pre = curr curr = temp return prehttps://www.cnblogs.com/kumata/p/9147077.htmlhttps://blog.csd原创 2020-05-24 21:57:09 · 167 阅读 · 0 评论 -
算法六---找到两数之和为固定值的下标
题目:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。方法一:class Solution: def twoSum(self,nums,target): n = len(nums) # 获取nums的长度,是4 for x in range(n-1): # 外层循环先取出下标0,对应着数组里的第一个数字 for y in ran...转载 2020-05-24 21:37:59 · 338 阅读 · 0 评论 -
算法五---连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:最大和连续子数组一定有如下几个特点:1、第一个不为负数2、如果前面数的累加值加上当前数后的值会比当前数小,说明累计值对整体和是有害的;如果前面数的累加值加上当前数后的值比当前数大或者等于,则说明累计值对整体和是有益的。步骤:1、定义两个变量,一个用来存储之前的累加值,一个用来存储当前的最大和。遍历数组中的每个元素,假设遍历到第i个数时:①如果前转载 2020-05-24 21:05:36 · 260 阅读 · 0 评论 -
算法四--阶乘的和
面试题:求1!+2!+......+10!方法递归求n!,求阶乘的和时,可以使用for循环(但是在牛客上使用for循环,提示堆栈溢出),方法二,使用列表的形式保存每个数据的阶乘,然后再求和代码中会将两个方法全部写出,以供参考,由于能力有限,堆栈溢出问题,还没有仔细研究。def recursion(n): if n==1: return 1 else: return n*recursion(n-1)方法一:注意range的 范围:从1开始sum=原创 2020-05-23 22:00:25 · 661 阅读 · 0 评论 -
算法三--回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。分析关键字:1)整数:复数、0、正整数 2)顺序问题:要求正序和倒序一样,那么正整数时,要对数字位数进行划分:1位、>1位情况class solution(): def isPalindrom(n): if n<0: return False elif 0<= n <10: ...原创 2020-05-23 20:32:39 · 216 阅读 · 0 评论 -
算法2---快速排序之双边循环法
快速排序之双边循环法思路:1、先确定基准数据,左边数据小于基准数据,右边数据大于基准数据;2、根据基准数据将数据一分为二,再次递归执行双边循环法,其中左边数据的右边界为基准数据的索引号-1,右边数据的起始边界为基准数据的索引号+1问题来了,如何确定基准数据?基准数据可以随意定,但是关键是得到基准数据在整个列表中的位置,以便将列表数据根据基准数据进行划分。------双边循环法,本质是随意确定一个基准数据,利用左右两个指针,进行遍历,当右边数小于基准数据,且左边大于基准数据时,交换左右指针数据原创 2020-05-21 23:02:21 · 561 阅读 · 0 评论 -
算法1---冒泡排序
冒泡排序:依次将两个值进行比较,前者比后者大时,位置互换,每个数都会执行一次此过程算法:def Bubble sort(n): if len(n)<2: return n else: for i in range(len(n)-1): for j in range(len(n)-i-1): if n[j] > n[j+1]: n[j],n[j+...原创 2020-05-20 23:13:12 · 184 阅读 · 0 评论 -
算法的时间与空间复杂度(一看就懂)
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内...转载 2020-01-06 16:23:54 · 278 阅读 · 0 评论