算法
wxdoop
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
展开
-
位运算相关题目常用操作
将x最右边的n位清零 x&(~0 << n)获取x的第n位值(0或1): (x>>n)&1获取x的第n位的幂值:x&(1 << (n-1))仅将第n位置为1: x | (1 << n)仅将第n位置为0:x&(1 << n)将x最高位至第n位清零x &( (1 << n) -1)将第n位至第0位清0:x&(~((1 << (n+1))-1))...原创 2020-08-17 17:50:57 · 227 阅读 · 0 评论 -
leetocode 15.三数之和
难度就是结果进行去重。之前做过一道两数之和的题,本题也采用双指针解法。特判:当数组长度小于3时,返回空列表对数组进行排序,方便之后的去重对数组进行遍历,当元素,与前边的相同时,跳过本次循环,当数组的元素大于0时,之后的元素肯定没有可以相加为0的三个数了。因此返回结果假设l = i - 1 , r = len(nums) -1,如果nums[i]+nums[l]+nums[r]>0...原创 2020-01-21 10:41:24 · 183 阅读 · 0 评论 -
leeetcode-bytedance-复原ip
class Solution: def restoreIpAddresses(self, s: str) : result= [] def get_res(s, res=[]): if len(res) == 4: if len(s) == 0: result.a...原创 2020-01-08 21:21:21 · 180 阅读 · 0 评论 -
leetcoed-bytedance-简化路径
class Solution: def simplifyPath(self, path: str) -> str: res = [] print(path.split("/")) for i in path.split("/"): if i =="..": if res: ...原创 2020-01-08 21:05:22 · 169 阅读 · 0 评论 -
leetcode-bytedance-字符串的排列
满脑子都是暴力法:结果就超时了一开始这么想的,就生成所有的由s1的组合,然后依次去s2中寻找是否有匹配的。class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: all_str = self.get_all_str(s1) for i in all_str: ...原创 2020-01-07 20:25:06 · 211 阅读 · 0 评论 -
leetcode-bytedance-最长公共前缀
class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if len(strs)==0: return "" if len(strs)==1: return strs[0] res = strs[0]...原创 2020-01-07 15:50:27 · 183 阅读 · 0 评论 -
leetcode-bytedace-无重复字符的最长子串
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: # 字典中的形式为{word,index} res_dict = dict() # 本次的结果 res = 0 # 上次的结果 last_res = 0...原创 2020-01-07 15:45:45 · 112 阅读 · 0 评论 -
leetcode 22. 括号生成
递归?class Solution: def generateParenthesis(self, n: int) -> List[str]: if n ==1: res = [] res.append("()") return res else: res...原创 2019-12-21 17:03:10 · 90 阅读 · 0 评论 -
leetcode 44.通配符匹配
动态规划 def isMatch1(self, s, p): """ :type s: str :type p: str :rtype: bool """ sn = len(s) pn = len(p) dp = [[False] * (pn + 1) for ...原创 2019-12-09 14:30:38 · 88 阅读 · 0 评论 -
leetcode 10.正则表达式匹配
动态规划。class Solution(object): def isMatch(self, text, pattern): def match(self, text, pattern): res = {} def fun(i,j): if (i,j)not in res:# 如果不存在,就添加 ...原创 2019-12-09 11:16:03 · 83 阅读 · 0 评论 -
leetcode 45.跳跃规则
# 贪心算法,找到当前索引可跳的范围中,能跳步数最大的。# 如果当前索引加自己可跳的范围大于等于了列表的长度-1,那么就step+1# 如果当前的索引超过了列表的长度,那么就stepclass Solution: def jump(self, nums): length = len(nums) def solve(index = 0,step=0...原创 2019-12-06 09:31:51 · 297 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合
没啥思路直接写就完了···dict_ = {"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"} res = [] for i in digits: if len(res)==0: res.exte...原创 2019-12-05 15:05:02 · 72 阅读 · 0 评论 -
leetcode 42.接雨水
class Solution: def trap(self, height): if len(height) ==0: return 0 max_height = max(height) res = 0 for i in range(max_height): start,en...原创 2019-12-05 14:46:13 · 154 阅读 · 0 评论 -
leetcode 20.有效的括号
栈class Solution: def isValid(self, s: str) -> bool: list_ = list(s) stack = [] index = None dict_ = {")":"(","}":"{","]":"[","(":")"} for i in list_: ...原创 2019-12-05 14:15:40 · 78 阅读 · 0 评论 -
leetcode 41. 缺失的第一个正数
我的答案:class Solution: def firstMissingPositive(self, nums): if len(nums) == 0: return 1 temp = max(nums) if temp<1: return 1 for i in ra...原创 2019-12-04 09:07:39 · 73 阅读 · 0 评论 -
leetcode 23. 合并K个排序链表
最简单的暴力求解法将所有链表的值,都添加到一个列表中,排序后,再构造结果。(没啥结束含量)优先队列将所有链表的值,都添加到一个优先队列中,再构造结果。(有技术含量了哈哈哈)...原创 2019-12-03 15:59:59 · 513 阅读 · 0 评论 -
回朔算法 - 字典查找
每天早上一道题 12.3给定两个单词,一个初始单词,一个目标单词,一个词典,找到从初始单词到目标单词的最短路径。变换规则: 一次只能变换一个位置的字符。 每一次转换后的单词,必须在字典中。 字典中没有初始单词 所有单词长度相同 字典中没有重复的词 全部词都是小写# 给定两个单词,一个词典,按照词典从每次只能改变一个字母,输出最短的转变方式import copydef s...原创 2019-12-03 09:03:36 · 189 阅读 · 0 评论 -
分治算法——连续子列表的最大和
# 利用分治算法,连续子列表的最大和可能有三种情况,左列表的最大和,右列表,中间列表def solution(arr): if len(arr) == 1: return arr[0] split_index = len(arr)//2 arr_1, arr_2 = arr[0:split_index],arr[split_index:] lef...原创 2019-11-29 15:30:07 · 311 阅读 · 0 评论 -
分治算法-归并排序-迭代法实现
# 迭代法思想:先将arr中的每一个元素当做一个列表,然后将相邻的两个别表按顺序合并为一个列表# 最终将合并为结果集def bottom_up(arr): if len(arr) == 1: return arr[0] i = 0 res = [] while i < len(arr): if i + 1 < le...原创 2019-11-29 10:11:56 · 375 阅读 · 0 评论 -
分治算法-归并排序-递归法实现
# 1. 切分,# 2. 排序# 3. 合并def top_down(arr): if len(arr) == 1: return arr arr1, arr2 = split_(arr) res1 = top_down(arr1) res2 = top_down(arr2) res = sort_(res1,res2) r...原创 2019-11-29 09:51:07 · 177 阅读 · 0 评论 -
最短路径问题——DIJKSTRA算法
from collections import defaultdictimport sysclass Graph: def __init__(self): self.nodes = {} #节点集合 self.edges = defaultdict(list) self.distances = {} def add_no...原创 2019-11-28 14:58:49 · 369 阅读 · 3 评论 -
最短路径问题——Floyed算法
import sysclass solution: def solve_flyod(self, dist, start, end): """ 先根据距离矩阵创建,路径矩阵,然后再根据路径矩阵递归返回路径 :param dist: 节点的距离矩阵 :param start: 起始节点 :param en...原创 2019-11-28 14:53:33 · 261 阅读 · 0 评论 -
动态规划-背包问题
背包容量为9,在背包可承受范围内,携带价值更高的物品。并列出背那些物品物品重量价值25445632class solution(): def __init__(self, w, v, num): self.res_table = [[0 for i in range(num + 1)] for i in range(l...原创 2019-11-27 10:41:41 · 117 阅读 · 0 评论 -
动态规划-爬梯子问题
class solution: def solve(self,num): if num ==1: return 1 elif num ==2: return 2 else: return self.solve(num-1)+self.solve(num-2)if ...原创 2019-11-27 08:43:41 · 400 阅读 · 0 评论 -
贪心算法-哈弗曼树
class node(): def __init__(self, flag,values=None): self.flag = flag self.leftnode = None self.rightnode = None self.parent = None self.values = valuesde...原创 2019-11-26 11:15:02 · 115 阅读 · 0 评论 -
回溯算法-解数独
假设-判断-假设class solution(): def solve(self,arr): self.helper(arr,0) def helper(self,arr,index): if index==81: print(arr) return else: ...原创 2019-11-25 14:58:29 · 188 阅读 · 0 评论 -
回溯算法-八皇后问题
# 第一行肯定会有一个放置保安,以此来循环# 回溯的条件,如果位置冲突(列或者斜线,因为是行位置是columnPosition的索引,因为不会重复)class solution(): def slove(self, n): self.num = 0 self.helper([-1] * n, 0, n) def helper(self, ...原创 2019-11-25 10:03:14 · 97 阅读 · 0 评论 -
回溯算法-选课问题
有四门课,语文,数学,英语,物理,选两门课(不能重复),需要注意的是(语文,数学)和(数学,语文)是一样的。根据排列组合可以得知有6种选法。class solution(): def solve(self,class_list): self.helper(class_list,[]) def helper(self,class_list,re...原创 2019-11-22 09:45:37 · 504 阅读 · 0 评论 -
广度优先遍历-树的右侧
从右往左看可以看到的节点,对于上图来说,就是1367广度优先遍历class Tree(): def __init__(self,num): self.leftNode = None self.rightNode = None self.num = numdef fun(node): res_list = [] ju...原创 2019-11-21 14:35:21 · 126 阅读 · 0 评论 -
广度优先遍历-制高点问题
假设有一个数组position = [[1,3,2,3,5],[3,4,5,6,3],[2,7,4,3,3],[5,2,2,3,1],]制高点是可以一直向下走到东西南北四条边的,向下走的过程不能爬坡,只能走比当前点低的点或者跟当前点一样高的点。比如7就是制高点。position = [ [1,3,2,3,5], [3,4,5,6,3], [2,7,4,3,3...原创 2019-11-20 11:40:31 · 465 阅读 · 0 评论 -
广度优先遍历-选课问题
# 题目选课# 数学-》# 计算机基础 -》 java - 》# 英语 - 》算法## 怎样选课?# 创建一个列表表示课程之间的关系,1表示依赖class_relation = [ [0,0,1,0,0], [0,0,1,0,0], [0,0,0,0,1], [0,0,0,0,1], [0,0,0,0,0]]...原创 2019-11-20 09:53:03 · 150 阅读 · 0 评论 -
字母组合
给定几个字母,求全部排列组合。list_ = ["a", "b", "c", "d","e"]# 最大组合数class solution(): def fun(self, list_, current=""): if len(list_) > 1:// 如果只剩下一个字母,就递归结束 for i in range(len(list...原创 2019-11-18 08:32:40 · 208 阅读 · 0 评论 -
二叉树最大路径和
每个节点不可以重复经过求,求二叉树的最大路径和。二叉树如图本文采用深度优先算法解题。假设每个节点都有两个属性,s(stop),c(continue)s属性为,改节点及其以下节点的不停止走法最大值。c属性为在还有路可走的情况下的最大值。举例说明:1叶子节点node4节点,有两条路可走:路线一和路线二路线一意味着,经过node4后无处可走,路线二意味着经过node4后还有路可走。分别...原创 2019-11-16 09:03:03 · 265 阅读 · 0 评论