算法
weixin_43751285
这个作者很懒,什么都没留下…
展开
-
(leetcode)删除中间节点
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。这个题的意思比较奇怪我读了好久才明白,大概的意思是你只能访问当前节点及其以后的节点,但是呢你需要把当前节点删除。大家都知道链表删除节点是通过指向删除的也就是访问到当前节点之前的节点curNodepre,切换指向:b.next = b.next.next。由下图2可知。但是题意只让访问当前节点及其之后的节点不让访问之前的节点。那么我们只能够将当前节点c的值修改和下一个节点d的值样这样我们也可以达到上述3的效.原创 2020-11-17 21:05:38 · 118 阅读 · 0 评论 -
牛客网:字符串的统计字符串
牛客网题目描述:给定一个字符串str,返回str的统计字符串。例如“aaabbbbcccd”的统计字符串为“a_3_b_4_c_3_d_1”。输入字符长度都大于1解题思路:1.第一种方法输入的是"aaa\n"这种字符。因此我们将当前字符cur指向首字符,从1- 字符串长度的范围内开始遍历判断当前字符cur是否与遍历的字符n[i]相等,如果相等的话count+1记录重复字符的数量。如果不等则记录前边重复字符+""+count+"",在不相等的时候还有一种情况就是当遍历到字符串最后一位的时候。后边不加“原创 2020-10-23 11:58:23 · 470 阅读 · 0 评论 -
剑指offer(1) 设计模式
"""单例模式1. 仅仅适合单线程模式的2. 加锁适合多线程模式的3. 对2 的优化4. 是否可以使用 python特有语法方法设计。5. 最好的方法""""""__new__ 的作用 是为一个类创造对象用的。__init__ 的作用 是为一个创建好的对象赋值用的。为什么我们在写类的时候只写__init 不写 __new__ 因为 我们仅仅需要对该对象赋值就行了 创建对象直接用继承父类的__new__就行了。除非有特殊需求需要按照你的要求去创建对象,比如单例模式。1.该模式原创 2020-10-07 11:52:28 · 138 阅读 · 0 评论 -
剑指offer(3)数组中重复的数字
题目描述剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3来源:力扣(LeetCode)"""三种解决方案1. 排序 遇到第一个前后相同的元素 为重复元素。 时间复杂度 n*logn2. 一遍遍历放入到 如果哈希原创 2020-10-07 11:35:34 · 73 阅读 · 0 评论 -
leetcode刷题(4)
# 1. 两数之和 利用字典 哈希查找class Solution1: def twoSum(self,nums,target): d = {} n = len(nums) for x in range(n): if target - nums[x] in d: return d[target-nums[x]],x else: d[nums[x]] = x# 15 三数之和。 排序 双指针class Solution2: def threeSum(s原创 2020-08-29 00:45:25 · 119 阅读 · 0 评论 -
leetcode刷题(3)
时间仓促只写了代码和简单注释,后续会补充。# 35 搜索插入位置 二分查找# 找到target相同值返回索引 如果不存在返回插入位置class Solution(): def searchInsert(self,nums,target): n = len(nums) left = 0 right = n-1 ans = n while (left<=right): mid = ((ri原创 2020-08-26 01:35:46 · 124 阅读 · 0 评论 -
leetcode刷题(2)
最长回文字串一、第一种解决方案是通过暴力求解首先我们列出来该字符串所有的字串然后进行判断是否是回文串,返回长度最长的那个为结果。"""5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。"""class Solution1(object): def longestPalindrome(self, s): """ .原创 2020-08-23 12:16:49 · 161 阅读 · 0 评论 -
leetcode刷题
50 Pow(x, n)# 暴力循环class Solution1(object): def myPow(self, x, n): if n == 0: return 1 if n < 0: x = 1 / x n = -n ans = 1 res = 1 while n: if n % 2: .原创 2020-08-19 23:54:58 · 475 阅读 · 0 评论 -
算法入门(10)合并两个有序表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode: # 合并两个有序列表 l...原创 2019-12-25 18:40:28 · 340 阅读 · 0 评论 -
算法入门(9)无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解析:如果是空字符串的话最长字串是0。创建一个字典存放字符和其对应下标。将字符串中的第一个字符作为键下标作为值存入字典。从字符串下标为1的位置开始遍历字符串,判断该字符是否在字典中出现,如果出现则找到字...原创 2019-12-25 16:57:43 · 83 阅读 · 0 评论 -
算法入门(8)统计列表中偶数位数字个数和
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:2解释:12 是 2 位数字(位数为偶数)345 是 3 位数字(位数为奇数)2 是 1 位数字(位数为奇数)6 是 1 位数字 位数为奇数)7896 是 4 位数字(位数为偶数)因此只有 12 和 7896 是位数为偶数的数字# 解法1 ...原创 2019-12-23 17:53:56 · 2014 阅读 · 0 评论 -
算法入门(7)猜数字
小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。解析:直接列表解析结果相加。def guess_number(answer,guess): ...原创 2019-12-23 17:24:40 · 156 阅读 · 0 评论 -
算法入门(6)链表和
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2019-12-20 18:46:12 · 101 阅读 · 0 评论 -
算法入门(5)两数之和
leetcode第一题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1...原创 2019-12-20 11:23:20 · 154 阅读 · 0 评论 -
算法入门(5)枚举法(熄灯问题)
参考该链接和B站上的视频做一些简单的拓展。题目描述:有一个5行6列的按钮矩阵,矩阵中每一个位置都有一个灯和一个按钮。当按下某个位置下按钮后该位置和该位置周围(上,下,左,右)的灯的状态都会改变依次。如果该位置在矩阵边上只会改变周围3个位置灯的状态,如果在角上只会改变周围两个位置灯的状态。如下图所示(复制北大mooc上的图):问题:给定矩阵的初始状态,求一种按钮的方案能够将矩阵中所有的灯...原创 2019-12-18 17:15:53 · 513 阅读 · 0 评论 -
算法入门(4)二分+贪心
疯牛问题的二分贪心算法:加入二分查找速度快了不少。这里把r的最大值设置为: int((N[-1] - N[0])/(C-1)) 也就是 最大房间与最小房间的差除以需要放的牛数量减一。因为地一头牛确定放在第一个位置了。# 贪心部分def judge(N,C,d): num = 1 location = N[0] for i in range(1,len(N)): ...原创 2019-12-17 15:39:55 · 269 阅读 · 0 评论 -
算法入门(3)枚举法
描述农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,…,xN (0 <= xi <= 1,000,000,000).但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两...原创 2019-12-17 00:26:18 · 292 阅读 · 0 评论 -
算法入门(2)插入排序
插入排序:就是把一个无序数组按照从小到大或者从大到小排序为有序数组。1.首先将无序数组中的第一个元素设为有序数组的第一个元素。2.从无序数组中的第二个数开始与有序数组中的元素作比较如果大于新数组中的第k个元素则数组从第k个元素往后的元素都需要向右移动一位。腾出第k个元素的位置放入新元素。3.重复第二步取第三,四,五 。。。。 一直到无序数组为空。4.该方法无序数组从大到小排列为有序数组。...原创 2019-12-16 16:59:28 · 175 阅读 · 0 评论