lintcode 题目记录2
判断字符串是否是互为置换,类似 替换字符串之类的遍历就行了。。
class Solution:
# @param {string} A a string
# @param {string} B a string
# @return {boolean} a boolean
def stringPermutation(self, A, B):
# Write your code here
if len(A) !=len(B):return False
lb=[]
for b in B:,
lb.append(b)
for a in A:
if a in lb:
lb.remove(a)
else:
return False
return True
取滑动窗口的中位数,如果窗口是偶数取中间两个比较小的那个,这个做起来有点复杂,一开始上来直接遍历加排序,总是提示超时,后来优化排序除第一次用全排,后边直接用插入排序,直接用插入排序还是慢,因为上次的序列是一个有序序列可以用二分法优化
插入排序,这么做以后每次构造新的序列移除一个元素还是耗时多,因为本身上次序列是有序的,也可以直接通过索引知道要移除的值,再用二分查找,得出索引,直接移除该索引对应的值
class Solution:
"""
@param nums: A list of integers.
@return: The median of element inside the window at each moving.
"""
def medianSlidingWindow(self, nums, k):
# write your code here
le = len(nums)
res = []
a = []
def sort(b,first=True):
if len(b) < 2:return b
if first:
return sortq(b)#快速排序,只运行第一次
else:#二分插入
insert = b[len(b) - 1]
low=0
high=len(b)-2
while low<=high:
mid=(low+high)//2;
if insert>b[mid]:
low=mid+1
else:
high=mid-1
b.insert(low,insert)
b.pop()
return b def sortq(b):
if len(b)<2:
return b
else:
q=b[0]
less=[i for i in b[1:] if i<=q]
greator=[i for i in b[1:] if i>q]
return sortq(less)+[q]+sortq(greator) for i in range(le):
if i + k > le: break
if i == 0:
a = nums[i:i + k]
b = sort(a)
else:
n=len(b)
l = 0
r = n - 1
target = nums[i - 1]
while l <= r:#二分查找
mid = (l + r) // 2
if b[mid] > target:
r = mid-1
elif b[mid]<target:
l = mid+1
else:
b.pop(mid)
break
b.append(nums[i+k-1])
b=sort(b,first=False)
l=len(b)
if l % 2 == 0:
res.append (b[l / 2] if b[l / 2 - 1] > b[l / 2] else b[l / 2 - 1])
else:
res.append(b[l // 2])
return res
接雨水二 ,一个二维的数组,每个位置有一个高度,问可以接多少水·
整了半天没整明白,网上查了下,从外围构造一个范围,用优先队列做存储,每次pop最小的一个高度然后判断其上下左右的位置是否比该值小,小就又水流入,然后把该点push队列,标记高度为高的哪一个,标记访问到的位置,循环直到队列没有为止
python 又自带的优先队列 heapd,但是这里需要自定义一个类型,看了一下heapd里面的实现代码做大小比较的时候是直接用的运算符,这里直接把自定义类型重载运算符就可以直接用了
class Solution:
class bar(object):
def __init__(self, x, y, h):
self.x = x
self.y = y
self.h = h def __lt__(self, other):
return self.h < other.h def __gt__(self,other):
return self.h > other.h def __eq__(self, other):
return self.h == other.h
# @param heights: a matrix of integers
# @return: an integer
def trapRainWater(self, heights):
# write your code here
res=0
import heapq
pq = []
heapq.heapify(pq)
cols=len(heights[0])
rows=len(heights)
visit=[None]*rows
for i in range(rows):
visit[i]=[False]*cols for i in range(cols):
heapq.heappush(pq,self.bar(0,i,heights[0][i]))
visit[0][i]=True
heapq.heappush(pq, self.bar(rows-1, i, heights[rows-1][i]))
visit[rows-1][i] = True for i in range(1,rows-1):
heapq.heappush(pq, self.bar(i, 0, heights[i][0]))
visit[i][0] = True
heapq.heappush(pq, self.bar(i, cols-1, heights[i][cols-1]))
visit[i][cols-1] = True dir=[[-1,0],[1,0],[0,-1],[0,1]]
while len(pq)>0:
b = heapq.heappop(pq)
for i in dir:
x=b.x+i[0]
y=b.y+i[1]
if x>=0 and x<rows and y>=0 and y<cols and not visit[x][y]:
visit[x][y] = True
res=res+max(0,b.h-heights[x][y])
if heights[x][y]>b.h:h=heights[x][y]
else: h=b.h
nb=self.bar(x,y,h)
heapq.heappush(pq,nb) return res
链表求和问题,两个链表,每个节点都只有一位数字,表示一个多位数,输出相加以后的数字的链表形式,这里把两个链表都直接累加程字符串,然后转成数字相加,再转成字符串然后组装成链表输出
class Solution:
# @param l1: the first list
# @param l2: the second list
# @return: the sum list of l1 and l2
def addLists2(self, l1, l2):
# Write your code here
strl1 = ''
current = l1
while current is not None:
strl1 = strl1+str(current.val)
current = current.next
intl1 = int(strl1)
strl1 = ''
current = l2
while current is not None:
strl1 = strl1 + str(current.val)
current = current.next
intl2 = int(strl1)
val = str(intl1+intl2)
res = None
last = None
for s in val:
v = int(s)
if res is None:
res = ListNode(v)
last=res
else:
last.next = ListNode(v)
last = last.next
return res
回文数,转成字符串倒个序,然后再转成数字,判断相等就行了
class Solution:
# @param {int} num a positive number
# @return {boolean} true if it's a palindrome or false
def palindromeNumber(self, num):
# Write your code here
strr = ''
for s in str(num):
strr = s + strr
num2=int(strr)
return num == num2
lintcode 题目记录2的更多相关文章
- lintcode 题目记录3
Expression Expand Word Break II Partition Equal Subset Sum Expression Expand 字符串展开问题,按照[]前的数字展开字符 ...
- lintcode题目记录4
Russian Doll Envelopes Largest Divisible Subset Two Sum - Input array is sorted Russian Doll ...
- 牛客OI周赛9-提高组题目记录
牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...
- lincode 题目记录6
the Duplicate Number 132 PatternFind 找重复的数字··直接暴力枚举是不行的···又超时提示·· 暴力枚举的写法· res=0 def findDuplicate( ...
- lincode 题目记录5
Course Schedule 安排课表 Frog Jump 最长回文字符串长度 Course Schedule 选课方案问题,题目说的很清楚了就是bfs或者dfs,然后加个字典优化,弄了好久没 ...
- 2019-中小型公司PHP面试题目记录(附带答案)
博主是三线省会城市的苦逼技术开发,主攻PHP方向,平时前后端语言也都有涉及,因为都是自学,上手就是框架,工作五年来基础补的不稳,换工作的时候苦不堪言,感觉一上来就问Ngnix的运行机制,php的被编译 ...
- 剑指offer题目记录
1.如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStri ...
- 二分查找总结及部分Lintcode题目分析 4
二分法不只能像之前的记录,可以找到index~第二种类型是找到二分答案.有以下几个例子,都是之前二分法的扩展,不再赘述,只记录下忽略的点,以后回顾多注意~ 1. wood cut class Solu ...
- 二分查找总结及部分Lintcode题目分析 3
Search in rotated sorted array,题目中也给出了相应的例子,就是在sorted array某个节点发生了翻转(ie.0 1 2 4 5 6 7 might become 4 ...
随机推荐
- SecureCRT上传下载文件
这篇内容在哪看到的我也找不到了,不过就是做个记录. 步骤如下: 1.SecureCRT连接远程终端. 2.在连接窗口上方右击,弹出菜单后点击Connect SFTP Session, 3.点击后弹出窗 ...
- leetcode-806-Number of Lines To Write String
题目描述: We are to write the letters of a given string S, from left to right into lines. Each line has ...
- jquery选项卡效果
效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- C#集合之栈
栈(Stack)和队列是非常类似的一个容器,只是栈是一个后进先出(LIFO)的容器. 栈用Push()方法在栈中添加元素,用Pop()方法获取最近添加的一个元素: Stack<T>与Que ...
- FreeRTOS-01移植及任务创建和删除
根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务创建和删除API函数: 工程列表: 1. main.c /**/ #include ...
- am335x uboot启动流程分析
基本指令含义 .globl _start .globl指示告诉汇编器,_start这个符号要被链接器用到,所以要在目标文件的符号表中标记它是一个全局符号 b,bl b是不带返回的跳转 bl带返回的跳 ...
- (转)haproxy启动故障:Starting proxy:cannot bind socke
haproxy启动时提示失败: [ALERT] 164/110030 (11606) : Starting proxy linuxyw.com: cannot bind socket 这个问题,其实就 ...
- (转)Linux-HA开源软件Heartbeat(配置篇)
原文:http://ixdba.blog.51cto.com/2895551/548625 http://gzsamlee.blog.51cto.com/9976612/1828870 Linux-H ...
- oracle 表空间tablespace
一.Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在的,把多个DataFile合并到一起就是 ...
- oracle insert两个关联表
现有一张老师学生表(tb_tea_cou),由于业务需要,需把老师学生表tb_tea_stu拆分成两张表(tb_tea.tb_cou),并把记录insert到这两张子表中(tb_tea.tb_cou为 ...