『LeetCode』练习第二弹

3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

 1 class Solution(object):
 2     def lengthOfLongestSubstring(self, s):
 3         """
 4         :type s: str
 5         :rtype: int
 6         """
 7         l = len(s)
 8
 9         # 单个字符或空字符直接返回
10         if l == 1:
11             return 1
12         elif l == 0:
13             return 0
14
15         res = []
16         for i in range(l):
17             for j in range(i + 1, l):
18                 if s[j] in s[i:j]:
19                     print(s[i:j])
20                     res.append(len(s[i:j]))
21                     break
22                 # j是最后一个字符时直接跳出循环来不及计数手动+1
23                 elif j==l-1:
24                     print(s[i:j])
25                     res.append(len(s[i:j])+1)
26         return max(res)

结果:算法没什么问题,问题是又又又超时了T_T

有关子串和子序列:

子串:子串是必须在原字符串中可以找到的,asd中的sd是子串。

子序列:子序列可以拆分,asd中的ad就是子序列,sd既是子串又是子序列。

4. Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

Example 1:

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5
 1 class Solution(object):
 2     def findMedianSortedArrays(self, nums1, nums2):
 3         """
 4         :type nums1: List[int]
 5         :type nums2: List[int]
 6         :rtype: float
 7         """
 8         nums = nums1 + nums2
 9         nums = sorted(nums)
10         l = len(nums)
11         if l % 2 == 0:
12             return (nums[int(l/2-1)]+nums[int(l/2)])/2.0
13         else:
14             return (nums[int((l-1)/2)])

结果:Accepted~~虽然标注是hard难度,但是对python来讲这种计算简直太简单了,不过要是用c估计会很麻烦...又想起了写的我头皮发麻的研究生复试机考...没错就是c...

补充一点:

对于非硬性要求的环境,我倾向于使用3.x版本而不是2.7,而这里默认编译器是2.7,所以有一点细节要处理,2.7默认除法继承操作数类型,3.x默认浮点型,所以会有int()(为了3.x可以运行)和/2.0(为了2.7可以运行)的类型转换处理。

时间: 2024-11-05 20:14:41

『LeetCode』练习第二弹的相关文章

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import torch.nn as nn import torch.nn.functional as F class LeNet(nn.Module): def __init__(self): super(LeNet,self).__init__() self.conv1 = nn.Conv2d(3, 6, 5)

『PyTorch』第十弹_循环神经网络

『cs231n』作业3问题1选讲_通过代码理解RNN&图像标注训练 对于torch中的RNN相关类,有原始和原始Cell之分,其中RNN和RNNCell层的区别在于前者一次能够处理整个序列,而后者一次只处理序列中一个时间点的数据,前者封装更完备更易于使用,后者更具灵活性.实际上RNN层的一种后端实现方式就是调用RNNCell来实现的. 一.nn.RNN import torch as t from torch import nn from torch.autograd import Variab

『LeetCode』练习第四弹_算法6题

6. ZigZag Conversion The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by l

『LeetCode』练习第六弹_算法9题

9. Palindrome Number 判断回文数 1 class Solution(object): 2 def isPalindrome(self, x): 3 """ 4 :type x: int 5 :rtype: bool 6 """ 7 if x<0: 8 return False 9 y = int(str(abs(x))[::-1]) 10 if x == y: 11 return True 12 else: 13 ret

『PyTorch』第五弹_深入理解autograd_下:Variable梯度探究

查看非叶节点梯度的两种方法 在反向传播过程中非叶子节点的导数计算完之后即被清空.若想查看这些变量的梯度,有两种方法: 使用autograd.grad函数 使用hook autograd.grad和hook方法都是很强大的工具,更详细的用法参考官方api文档,这里举例说明基础的使用.推荐使用hook方法,但是在实际使用中应尽量避免修改grad的值. 求z对y的导数 x = V(t.ones(3)) w = V(t.rand(3),requires_grad=True) y = w.mul(x) z

『PyTorch』第三弹_自动求导

torch.autograd 包提供Tensor所有操作的自动求导方法. 数据结构介绍 autograd.Variable 这是这个包中最核心的类. 它包装了一个Tensor,并且几乎支持所有的定义在其上的操作.一旦完成了你的运算,你可以调用 .backward()来自动计算出所有的梯度,Variable有三个属性: 访问原始的tensor使用属性.data: 关于这一Variable的梯度则集中于 .grad: .creator反映了创建者,标识了是否由用户使用.Variable直接创建(No

『TensorFlow』第四弹_classification分类学习_拨云见日

本节是以mnist手写数字识别为例,实现了分类网络(又双叒叕见mnist......) ,不过这个分类器实现很底层,能学到不少tensorflow的用法习惯,语言不好描述,值得注意的地方使用大箭头标注了(原来tensorflow的向前传播的调用是这么实现的...之前自己好蠢): 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 '''数据下载''' 5 # one_

『PyTorch』第五弹_深入理解Tensor对象_中上:索引

一.普通索引 示例 a = t.Tensor(4,5) print(a) print(a[0:1,:2]) print(a[0,:2]) # 注意和前一种索引出来的值相同,shape不同 print(a[[1,2]]) # 容器索引 3.3845e+15 0.0000e+00 3.3846e+15 0.0000e+00 3.3845e+15 0.0000e+00 3.3845e+15 0.0000e+00 3.3418e+15 0.0000e+00 3.3845e+15 0.0000e+00 3

『PyTorch』第五弹_深入理解Tensor对象_中下:数学计算以及numpy比较

一.简单数学操作 1.逐元素操作 t.clamp(a,min=2,max=4)近似于tf.clip_by_value(A, min, max),修剪值域. a = t.arange(0,6).view(2,3) print("a:",a) print("t.cos(a):",t.cos(a)) print("a % 3:",a % 3) # t.fmod(a, 3) print("a ** 2:",a ** 2) # t.po