自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 43、最长公共前缀-Python-LeetCode-14

题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解法:class Solution(object): def equal_str(self, str1, str2): i, j = 0,

2020-09-01 17:23:46 137

原创 42、字典数组排序

题目:对字典数列的前n项进行排序lis = [{‘age’:20},{‘age’:30},{‘age’:25},{‘age’:12}] 对年龄进行排序解法#coding=utf-8import sys#str = raw_input()#print strclass Sort(object): def list_sort(self, arr): age_list = [] for people in arr: age_list.

2020-08-31 10:44:08 144

原创 41、找到丢失的数字

题目:将0到9的数组,删除几个数字,找到删除的哪几个数解法利用set相减即可#!/usr/bin/python# -*- coding:UTF-8 -*-a = [1, 3, 5, 7]b = [i for i in range(10)]print list(set(b) - set(a))

2020-08-28 17:26:01 124

原创 40、最大连续1的个数-Python-LeetCode-485

题目:给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含 0 和1。输入数组的长度是正整数,且不超过 10,000。解法:class Solution(object): def findMaxConsecutiveOnes(self, nums): """ :type nums: List[int]

2020-08-28 17:18:19 138

原创 39、利用python装饰器计算函数方法的耗时

代码如下:#!/usr/bin/python# -*- coding:UTF-8 -*-import timedef execute_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print func.__name__, 'exe

2020-08-27 17:05:02 150

原创 38、计算n的阶乘

题目计算n的阶乘解法一使用递归解决:#!/usr/bin/python# -*- coding:UTF-8 -*-class Factorial(object): def factorial(self, n): if n < 0: return False if n == 0 or n == 1: return 1 if n > 1: return n

2020-08-27 16:30:26 127

原创 37、 删除回文子序列-Python-LeetCode-1332

题目:给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。示例 1:输入:s = “ababa”输出:1解释:字符串本身就是回文序列,只需要删除一次。示例 2:输入:s = “

2020-08-27 16:18:06 153

原创 36、统计日志中出现次数最多的前10个ip

题目统计日志中出现次数最多的前10个ip解法利用shell脚本即可cat test.log | awk -F ' ' '{print $2}'| sort | uniq -c|sort -n -r|awk -F ' ' '{print $2}'|head -n 5脚本分析:1.cat *.log将文本内容打印到屏幕2.使用awk命令可以按照分割符将一行分割为多个列,第一列用$1表示,第二列用$2表示,依次类推awk -F" " '{print $2} //表示用空格作为分隔符进行

2020-08-18 13:49:01 1443

原创 35、统计字符串中大写字母、小写字母、数字和空格出现的次数

题目统计字符串中大写字母、小写字母、数字和空格出现的次数解法一遍历字符串,使用字符串内建函数判断代码如下:#!/usr/bin/python# -*- coding:UTF-8 -*-class StatisticStr2(object): def statistic_str(self, s): lower_char, upper_char, num, blank = 0, 0, 0, 0 for i in s: if i.is

2020-08-18 13:41:05 1719

原创 34、归并排序-Python

归并排序归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);自下而上的迭代;在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:However, it is not possible to do so

2020-08-18 00:42:12 98

原创 33、快速排序-Python

快速排序快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速

2020-08-18 00:38:11 108

原创 32、冒泡排序-Python

冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1、算法步骤(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。(3)针对所有的元素重复以上的步骤

2020-08-07 15:28:25 183

原创 31、寻找重复数-Python-LeetCode-287

题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。解法:使用map字典解决,将数组中出现的数字作为ke

2020-08-07 14:17:32 147

原创 30、旋转数组-Python-LeetCode-189

题目给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]

2020-08-06 15:46:01 112

原创 29、二分查找-Python-LeetCode-704

题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 nums

2020-08-06 14:18:44 181

原创 28、滑动窗口的最大值-Python-LeetCode-剑指 Offer 59 - I

题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3]

2020-07-31 20:19:33 167

原创 27、打家劫舍 II-Python-LeetCode-213

题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 2

2020-07-31 15:41:44 142

原创 26、最长回文子串-Python-LeetCode-5

题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解法一:暴力搜索解决,定义判断是否回文字符串方法,定义回文字符串最大长度max代码如下:class Solution(object): def isPalindrome(self, s): for i in range(len(s) /

2020-07-29 20:03:29 220

原创 25、最长回文串-Python-LeetCode-409

题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。解法利用哈希map,统计各元素出现的次数,然后计算即可代码如下:class Solution(object):def longestPalindrome(self,

2020-07-28 17:22:10 161 1

原创 24、最短无序连续子数组-Python-LeetCode-581

题目给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入的数组可能包含重复元素 ,所以升序的意思是<=。解法:使用排序,然后将排序后的数组与排序前对比,找到最开

2020-07-28 16:36:49 241

原创 23、汉明距离-Python-LeetCode-461

题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0)↑ ↑解法:用到位运算异或^,二进制展示bin(),和字符串内置函数str.count(str)代码如下:class Solution(object): def hammingDistance(sel

2020-07-28 15:22:18 578

原创 22、找到所有数组中消失的数字-Python-LeetCode_448

题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]解法一:使用map字典解决,将数组中出现的数字作为key存入map,然后判断[1,n]中的数字是否在map中,不在则为消失的数字存入

2020-07-28 14:02:39 276

原创 21、移动零-Python-LeetCode-283

题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解法:通过数组尾部插0,头部移除0来解决代码如下:class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int]

2020-07-27 17:34:16 99

原创 20、打家劫舍-Python-LeeCode-198

题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9

2020-07-27 17:13:26 243

原创 19、多数元素-Python-LeetCode-169

题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解法:这里用到字典map,遍历list,将数组值作为key加到map中,values来计数,最后遍历map,找出value为大于 ⌊ n/2 ⌋ 的元素即可代码如下:class Solution(object):

2020-07-27 14:38:15 226

原创 18、最小栈-Python-LeetCode-155

题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,

2020-07-27 14:29:28 86

原创 17、只出现一次的数字-Python-LeetCode-136

题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解法这里用到字典map,遍历list,将数组值作为key加到map中,values来计数,最后遍历map,找出value为1的key即可代码如下:class Solution(object): def sing

2020-07-24 21:00:59 116

原创 16、买卖股票的最佳时机-Python-LeetCode-121

题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入:

2020-07-24 20:00:48 154

原创 15、最大子序列-Python-LeetCode-53

题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解法这里用到动态规划的思想:(1)问题拆解为已知前n-1项连续子序列,和第n项,求前n项连续子序列最大值(2)定义两个数,一个是前n项连续子序列的最大值,另一个为前n-1连

2020-07-24 16:49:53 224

原创 14、用队列实现栈-Python-LeetCode-225

题目225. 用队列实现栈使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。你可以假设所有操作都是

2020-07-23 19:39:05 88

原创 13、用栈实现队列-Python-LeetCode-232

题目使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈

2020-07-23 16:21:12 87

原创 12、斐波那契数-Python-LeetCode-509

题目斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2.示例 3:

2020-07-22 21:35:36 111

原创 11、回文链表-Python-LeetCode-234

题目:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解法(1)将链表元素转成数组list(2)判断list是不是回文list,判断第i位和len - i是否相等即可代码如下:# Definition for singly-linked list.# class ListNode(object):#

2020-07-22 20:57:14 92

原创 10、相交链表-Python-LeetCode-160

题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [

2020-07-22 16:42:37 178 1

原创 9、反转链表-Python-LeetCode-206

题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?解法一题目已经有提示了,首先我们用迭代来解决这个问题(1)新建两个指针,一个指针是prev,代表前指针,最初指向none;一个指针是cur,代表当前指针,最初指向head(2)存储cur的下一指针tmp,cur指向前指针prev,然后prev和cu

2020-07-20 17:14:31 109

原创 8、环形链表2-Python-LeetCode-142

题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0

2020-07-17 16:59:09 96

原创 7、环形链表-Python-LeetCode-141

题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos = -1

2020-07-17 14:23:19 103

原创 6、合并两个有序链表-Python-LeetCode-21

题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解法这题可以使用递归,判断两链表节点,指向小的节点;(1)判断l1、l2是不是空链表,是则返回非空链表(2)判断两节点大小,使用节点更小的链表,当前节点指向新的两链表中更小的节点,最终返回当前列表代码如下:# Definition for singly-

2020-07-16 11:03:30 194

原创 5、有效的括号-Python-LeetCode-20

题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: "{[]}"输出: true解法这题有想到碰

2020-07-15 14:48:16 96

原创 4、整数反转-Python-LeetCode-7

题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解法一:看到这题,主要思路分以下几步:(1)将整数转换为字符 (2)再转换成list数组,(3)将list数组反转,(4)list

2020-07-13 20:14:20 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除