
算法逻辑
各类算法逻辑应用
linjing0504
这个作者很懒,什么都没留下…
展开
-
1704. 判断字符串的两半是否相似
字符串分半,分为两个字符串,分别计算两个字符串在元音的长度,对长度大小做判断原创 2022-11-12 23:38:14 · 358 阅读 · 0 评论 -
leetcode mysql 626. 换座位
换座位 mysql原创 2022-10-19 11:12:20 · 314 阅读 · 0 评论 -
python greedy 加油次数
题目要求:'''一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。 对于给定的n(n <= 5000)和k(k <= 1000)个加油站位置,编程计算最少加油次数'''分析:1、首先明确,一段路程,k个加油站,有k+1段路程。即: k=len(distance)-12、如果这k+1段路程中,任意一段路程大于n,反馈空,此题结束。3、如果k+1段路程都是小于n的。用while循环嵌套while循环,计原创 2021-08-26 17:54:06 · 401 阅读 · 0 评论 -
python maxProfit 最佳买股票时机
class Solution: def maxProfit(self,prices): res = 0 for i in range(len(prices)): for j in range(i,len(prices)-i): if prices[j]>prices[i]: res=prices[j]-prices[i] return res.原创 2020-12-09 17:56:56 · 347 阅读 · 1 评论 -
python decodeString 字符串解码
class Solution(object): def decodeString(self, s): """ :type s: str :rtype: str """ stack = [] curNum = 0 curString = '' for c in s: if c == '[': stack.append(.原创 2020-11-20 14:19:16 · 875 阅读 · 0 评论 -
python balancedStringSplit 分割平衡字符串
分析:1、栈的方法。判断栈是否为空,空就字符入栈。判断字符是否不同于栈底部元素,不同就顶部元素出栈,同就字符入栈。每当栈为空,结果累计一次。2、计算器的方法。初始n,m=0。判断字符是否等于‘L’(或者等于‘R’),相同就n加一,不同就n减一。每当n==0时,num累计一次。class Solution: def balancedStringSplit(self, s: str) -> int: stack = [] res = 0 .原创 2020-11-09 15:59:39 · 273 阅读 · 0 评论 -
python isPalindrome 判断回文链表
判断链表是否为回文链表分析:读取每个节点数值,放到列表list里;判断list是否跟反转list[::-1]相等代码class Node(object): def __init__(self,data=None,next=None): self.data=data self.next=nextclass Solution: def isPalindrome(self, node): list=[] whil.原创 2020-11-05 18:10:34 · 1009 阅读 · 0 评论 -
python deleteList 删除链表节点
#!usr/bin/env python#encoding:utf-8'''单链表删除指定节点'''class Node(object): def __init__(self,data,next=None): self.data=data self.next=nextclass DeleteNode(): ''' 删除指定节点功能 ''' def delete_node(self,node): .原创 2020-11-05 15:58:22 · 352 阅读 · 0 评论 -
python reverselist 链表反转
要求反转单链表分析做临时指针temp、新指针newhead、原链表指针cur;把temp,cur.next,newhead,cur四个值进行赋值变化: temp=cur.next cur.next=newHead newHead = cur cur = temp代码:class Node: def __init__(self,data=None,next=None): self.data=data self.next=nextdef reve.原创 2020-11-04 15:19:19 · 286 阅读 · 0 评论 -
python mergeTwoList 合并两个有序表
要求:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4分析: 1、分析表1和表2,创建一个新表。如果表1不存在,返回表2;如果表2不存在,返回表1;2、对三个表,做三个指针;对比表1和表2,找到第一个数,赋值给新表第三个指针cur,同时移动其他表的指针;3、当其中一个表结束,直接在新表中加上剩下的另外一个表即可。代.原创 2020-11-03 17:07:31 · 2153 阅读 · 0 评论 -
python insertLink 链表前中后插入
class Node:#创建链表 def __init__(self, dataval=None): self.dataval = dataval self.nextval = Noneclass SLinkedList: def __init__(self):#创建链表 self.headval = None def listVal(self):#遍历链表列表 val = self.headval .原创 2020-10-30 15:34:37 · 3568 阅读 · 0 评论 -
python sorString 上升下降字符串
分析:本题目要求字符串内非重复正序+倒序+正序+倒序+..重新排列,例如aaaabbbbcccc,最后abccbaabccba效果以下实现思路:1、把字符串借助序列set去重 2、sorted排序 3、取字符放到result,并在原有字符串s中replace删去 4、重复1和2过程,string重新去重排序;并用列表revserse倒序,重复3的过程取结果并删去。5、把以上过程while循环,判断条件为string非空。用的知识点:1、set(string),字符串set,去重边序列2、sorte.原创 2020-10-27 16:03:11 · 288 阅读 · 1 评论 -
python reverseLeftWords 旋转字符串
分析:旋转字符串是反转字符串的扩展,如s=‘abcdefg’,k=2,要求为把s的左边两位旋转到最后位置:cdefgab以下用了1、切片 2、双向队列两种方法代码:#左旋转字符串#方法1:切片s='abcdefg'print(s)k=2l=s[k:]+s[0:k]print(l)print("---------------")#方法2:使用双端队列from collections import deques='abcdefg'd = deque(s)k=2d.r原创 2020-10-26 17:37:18 · 338 阅读 · 0 评论 -
python reverseString 反转字符串
#!/usr/bin/python#题目:字符串反转#方法1:使用列表的reverse方法s='abc'print(s)aList =list(s)print(aList)print(type(aList))aList.reverse()#reverse还后还是alistprint(aList)revser_s="".join(aList)print(revser_s)print("--------------")#方法2:使用切片s='abc'print(s)l=s[:.原创 2020-10-23 18:06:42 · 380 阅读 · 1 评论 -
python invertTree 反转二叉树
#Definition for a binary tree node.class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Nonedef preorder(root): if root: print(root.val) preorder(root.left) preorder(root.r.原创 2020-09-14 17:51:01 · 588 阅读 · 0 评论 -
python isSymmetric 二叉树对称
分析:两个def函数判断左右子树,左节点和右节点是否全为空;是否一个为空;是否两个都不为空(如果两个都不为空,对比两值是否相等。);继续向下循环判断,左子树的左节点和右子树的右节点,以及左子树的右节点和右子树的左节点。code:class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Nonedef preorder.原创 2020-09-14 17:13:57 · 341 阅读 · 0 评论 -
python mergeTrees合并二叉树
分析:1、初始化二叉树2、如果t1不存在,返回t2;如果t1存在,t1的值=t1的值+t2的值;内部嵌套循环t1左子树和t1右子树,返回t13、赋值t1,t2,得出和代码: #Definition for a binary tree node,初始化二叉树class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right .原创 2020-09-07 17:35:27 · 610 阅读 · 0 评论 -
两个有序列表合并 merge python
分析:设置三个指针i\j\k,指向nums1,nums2,nums1最大空间,三个list的尾部。做两个循环,i作为内循环,j作为外循环,判断大小,大的赋值给k。指针以此迁移。还有一个投巧的方法:直接nums1+nums2,然后sort。codeclass Solution: def merge(self,nums1,m,nums2,n): i, j = m - 1, n - 1 k = n + m - 1 while j >= .原创 2020-08-31 16:07:57 · 319 阅读 · 0 评论 -
查找位置 searchInsert python
以下为暴力查找,更优的方法应该用二分法查找class Solution(object): def searchInsert(self, nums, target): if not nums: return 0 if nums[0]>target: return 0 if nums[len(nums)-1]<target: return len(nums) .原创 2020-08-28 16:45:31 · 229 阅读 · 0 评论 -
有效符号 isValid python
分析:1、把'(',')','{','}','[',']'放在字典bracketPairs 中,闭括号为key,开括号为vule2、循环读取s串中每个值,判断是否存在字典bracketPairs 的key中(闭括号),如果是开括号,append到stack中3、如果是闭括号,这个闭环号对应的字典bracketPairs值:bracketPairs[c],对比这个值是否与stack[-1]相等,相等就pop掉stack[-1],继续循环s串。4、循环完毕,最后判断stack是否已为空,若为空,tr..原创 2020-08-27 18:01:14 · 2045 阅读 · 0 评论 -
重复的子字符串 repeatedSubstringPattern python
分析思路:对s头部进行切片 组成mylist,myslist*次数等于s即可判断为True代码:def repeatedSubstringPattern(s): for i in range(1,len(s)): #print(i) mylist = s[0:i] if len(s)%i == 0: num= len(s)//i #print('num',num) if .原创 2020-08-25 17:49:51 · 327 阅读 · 0 评论 -
去重计数 removeDuplicates python
分析去重算法,这里实现4个方法。字典,利用了创建字典键,不能有重复键的特点。list转dict转list集合,利用了集合去重的特点。set(list)转list排序用两种方法:1、对list排序,前后值对比,只对不相等的计数。这个方法空间复杂度O(1),符合题目要求2、对list排序,再创建一个空的mylist,存在list且不存在mylist的值,放入mylist。空间复杂度O(n)代码:#使用字典方法def removeDuplicates1(nums): mylist=lis.原创 2020-08-25 11:38:09 · 2214 阅读 · 0 评论 -
数字转罗马 intToRoman python
解析:1、罗列罗马数字对应dict2、转列表元组 并 排序sorted(dic.items(), key=lambda item: item[1], reverse=True)其中dic.items()以列表返回可遍历的(键, 值) 元组数组;key=lambda item: item[1] 以值进行排序,key=lambda item: item[0] 以键进行排序3、num 从1000开始除//,返回整数*key,%余数继续向下面的vule除,循环。其中+两个对象相加,* ...原创 2020-08-21 11:18:18 · 408 阅读 · 0 评论 -
罗马转数字def romanToInt python
代码def romanToInt(s): """ :type s: str :rtype: int """ a={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} num=0 for i in range(len(s)-1): print('i',i) print('s[i]',s[i]) print('a[s[i]]',a[s[i]])..原创 2020-08-20 09:57:50 · 230 阅读 · 0 评论 -
python reverseInt 整数反转
描述:整数反转注意:1、正负数的处理2、尾数为0的处理代码:以下实现以字符转切片反转方式实现def revserse(x): z = list(str(x)) print(z) if z[0]!='-': print("z:",z) strx = str(x) if z[len(strx) - 1] == 0: revserse_strx = strx[::-2] if z[len(str.原创 2020-07-15 14:55:48 · 723 阅读 · 0 评论 -
needle in haystack python
要求:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。代码:def strStr(haystack, needle): len1=len(needle) if len1 ==0: return 0 for i in range(len(haystack)): if haystack[i:i+len1]==need.原创 2020-07-14 15:31:20 · 410 阅读 · 0 评论 -
快速排序 python实现
快速排序思路主要为:一列数,选中一个key(以下为第一个数),比key小的放左边,比key大的放右边。key放在一个列表。左边的继续选key,小的放左边,大的放右边;右边相同。以此形成递归代码实现#快速排序#把最后数作为关键keydef quick_sort(a): if len(a)<=1: return a elif len(a)>1: left = [] right = [] mindlis.原创 2020-07-03 17:27:24 · 236 阅读 · 0 评论 -
二分法 python
二分法 找到数据\未找到数据,都需要加以判断,以下为python实现:下面这个以递归实现,不是最简练的方法,但对判断找到和未找到数据,都做了判断实现。#排序后,二分法排查,找不到keydef func(a,key): min = 0 print("min=", min) max = len(a) - 1 print("max=", max) if a!=[]: center =int (min + max) // 2 pr原创 2020-07-02 12:37:08 · 371 阅读 · 0 评论 -
排序
对一组数由大到小进行排序a=[1,5,7.9,13,3,6]print(len(a))for i in range(len(a)-1): print("i =",i) for j in range(len(a)-1-i): print("j=",j) if a[j+1] > a[j]: a[j],a[j+1]=a[j+1],a[j] print(a)print(a)运行:6i .原创 2020-06-04 14:08:31 · 138 阅读 · 0 评论