[leetCode刷题笔记]2017.02.21
来源:互联网 发布:植物精灵 mac 编辑:程序博客网 时间:2024/06/08 14:19
153. Find Minimum in Rotated Sorted Array
这道题是找最小值,就是用二分法。先看区间内有没有旋转发生(nums[left]>nums[right]),如果有旋转发生,则要进入循环。循环中获得中间值,比较中间值与左边值,如果中间值大于左边值则mid到right之前存在最小值,让left=mid+1反之left到mid中存在最小值,right=mid
class Solution(object):
def findMin(self, nums):"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 1:
return nums[0]
length = len(nums)
left = 0
right = length - 1
while nums[left] > nums[right]:
mid = (left + right) / 2
if nums[mid] > nums[right]:
left = mid + 1
else:
right = mid
return nums[left]
162 Find Peak Element
这道题可以用递归做,如果出现中间值mid大于旁边值mid+1的情况则peak在左边,反之在右边
class Solution(object):
def findPeakElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
left = 0
right = len(nums) - 1
return self.helper(nums, left, right)
def helper(self, nums, left, right):
if left == right:
return left
mid = left + (right - left) / 2
if nums[mid] > nums[mid + 1]:
return self.helper(nums, left, mid)
else:
return self.helper(nums, mid + 1, right)
154. Find Minimum in Rotated Sorted Array ||
这道题考虑最坏情况就是除了一个最小值之外所有元素都一样,这样只能通过O(n)来做。。。所以不用二分法,用循环吧
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
compare = nums[0]
for element in nums:
compare = min(element, compare)
return compare
167. Two Sum II - Input array is sorted
很简单的题目。。。用两个指针从两边开始往中间移动。。。
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
left = 0
right = len(numbers) - 1
while right > left:
sum = numbers[left] + numbers[right]
if sum > target:
right = right - 1
elif sum < target:
left = left + 1
else:
return [left + 1, right + 1]
169. Majority Element
这道题能想到O(n)的解法不是很容易。从网上找了Moore voting algorithm,就是先选择一个当前数element,如果nums[i] == element则count++
nums[i] != element则count--
count = 0时候element = nums[i]
一遍循环走下来,我们总是能得到majority element因为其数量大于其他所有数之和count>0
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# Moore voting algorithm
element = 0
count = 0
for i in range(len(nums)):
if count == 0:
element = nums[i]
count = 1
else:
if element == nums[i]:
count += 1
else:
count -= 1
return element
189. Rotate Array
找了一个很巧的办法时间O(n)空间O(1)
就是对数组分段最后k个为一段,前面n - k为一段。分别对这两段进行旋转
然后再对整个数组进行旋转
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
# modify k
k = k % len(nums)
# reverse segment [1] to [n - k]
self.reverse(nums, 0, len(nums)-k-1)
# reverse segment [n - k] to [n]
self.reverse(nums, len(nums)-k, len(nums) - 1)
# reverse all
self.reverse(nums, 0, len(nums) - 1)
def reverse(self, nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start, end = start+1, end-1
- [leetCode刷题笔记]2017.02.21
- Leetcode刷题笔记
- LeetCode刷题笔记
- LeetCode刷题笔记
- leetcode刷题笔记
- [leetCode刷题笔记]2017.02.01
- [leetCode刷题笔记]2017.02.02
- [leetCode刷题笔记]2017.02.03
- [leetCode刷题笔记]2017.02.04
- [leetCode刷题笔记]2017.02.05
- [leetCode刷题笔记]2017.02.06
- [leetCode刷题笔记]2017.02.07
- [leetCode刷题笔记]2017.02.08
- [leetCode刷题笔记]2017.02.09
- [leetCode刷题笔记]2017.02.11
- [leetCode刷题笔记]2017.02.12
- [leetCode刷题笔记]2017.02.13
- [leetCode刷题笔记]2017.02.14
- 八:Java语言基础组成——运算符之位运算符和三元运算符
- 多个线程多个锁
- hihoCoder Challenge 27 #1469 : 福字 dp
- 数论常见定理汇总
- 常用地址(java)
- [leetCode刷题笔记]2017.02.21
- MBProgressHUD的基本使用
- 文件下载的三种方式,前端和后端实现
- 八数码难题
- 面试题七种方式实现Singleton模式
- C语言------#acm在线#
- 皮皮学Web第三弹——ServletConfig
- head first python第五章
- Android开发中的性能优化