新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-7-30
- 最后登录
- 1970-1-1
|
最近在复习面试,所以看到面经都想一下写写代码,顺便mark一下自己已经看过了。
和大家交流一下方法,如果有什么错误和改进的地方,希望能得到大家的指正。顺便预祝楼主顺利晋级:)
第一题是LC27 Remove Element https://leetcode.com/problems/remove-element/
用two point应该能解O(n)的解,我并没有remove因为觉得如果可以return的话,可以省去remove的那步
- def removeElement(self, nums, val):
- start, end = 0, len(nums)-1
- while start <= end:
- if nums[start] != val:
- start += 1
- else:
- nums[start],nums[end] = nums[end],nums[start]
- end -= 1
- return nums[:start+1]
复制代码
第二题应该是 LC 325. Maximum Size Subarray Sum Equals k 的变种
https://leetcode.com/problems/maximum-size-subarray-sum-equals-k/
题意没有很清楚是不是只有一个subarray可以满足sum = k,我就当只有一个答案来写了,如果有多个,应该是要建立一个dict,dict[sum] = [list of index] 然后用每个index来输出多种可能,如果不存在,return 0
- def maxSubArrayLen(nums, k):
- sumNum = 0
- dict = {}
- for i in xrange(len(nums)):
- sumNum = sumNum + nums[i]
- if sumNum == k:
- return nums[:i+1]
- elif dict.has_key(sumNum-k):
- return nums[dict[sumNum-k]+1:i+1]
- if not dict.has_key(sumNum):
- dict[sumNum] = i
- return 0
复制代码
|
|