Leetcode 20161007-1014
来源:互联网 发布:心经 张爱玲 知乎 编辑:程序博客网 时间:2024/05/17 00:01
Leetcode训练
Two Sum
题目链接
给出一个数组,一个目标值。在数组中找出两个数相加等于目标值,给出在数组中的位置。
思路
- 把数组nums排好
- i=0,j=len(nums)-1是一头一尾,将相加sum=nums[i]+nums[j]与目标值进行比对,小则i+=1,大则j-=1。直至找出两个数
- 遍历原数组,找出下标
错误点
- 没有考虑[0,1,2,0],0这种情况,遍历原数组时,需要进行从头,从尾分别做一次匹配,以避免两次找到同一个数。
改进
通过使用哈希可以巧妙解决
- 一个字典为空dict = {}
- 遍历数组for i in range(0,len(nums)-1)
- 看target - i 值在不在字典中,如果在,即可成功获得两个数字及下标
- 如果不在,将{nums[i]:i}放入字典中,dict[nums[i]]=i,
- 重复3,4步
当第一个数字进入了字典后,运行到第二个数字,即可获得结果
Integer To Roman
思路
题目链接
使用这两个数组
values = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]romans = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ]
num为输入的Integer,如果num不为0,遍历values,直到num>=values[i]
str添加这个罗马数字,并将num-=values[i]。直到num<=0(不会出现<0)。
含有4,9数字是一个例外,因为需要在前面添加I。所以我们在这里额外添加了900,400,90,40,9,4这几个字母,以规避需要在10,5的情况前添加罗马字母的问题。
Maximum Subarray
题目链接,终于来到这周难点的题目了。因为想做dp的,所以就选了这题。
不过其实这题也是比较容易的。
例如:某个数组[-2,1,-3,4,-1,2,1,-5,4]
sum[n]表示到由以第n个数结束的子数组最大和。如sum[n]=a[1]=-2,sum[2]=a[2],因为sum[n]<0的时候证明sum[n-1]对于sum[n]是没有帮助的,所以应该舍弃掉。因此,当判断sum[n]=a[n]或sum[n]=sum[n-1]+a[n]。取决于sum[n-1]是否大于0。
错误点:
一开始将sum,maxSum的初始值设为0,这样导致一些问题。因为[-1]这样的话也是要-1,所以应该sum = a[0] maxSum = a[0]。
总结
这周感觉题目还是比较水的,自己也没什么实力,就先用这些慢慢水一下先。
0 0
- Leetcode 20161007-1014
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- java关键字个人理解
- weak_ptr的使用
- js cookie 编码解码登录成功返回原页面
- LeetCode - Letter Combinations of a Phone Number
- 字节对齐
- Leetcode 20161007-1014
- 指数哥伦布码
- mysql数据排序输出
- 论单例模式在Andriod开发中的实用性
- 重新认识冗余字段
- 如何从根本上防止 SQL 注入?
- 用数组实现的线性表
- qt findChildren()
- 简单选择排序