832、反转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。
示例 1:
输入: [[1,1,0],[1,0,1],[0,0,0]]
输出: [[1,0,0],[0,1,0],[1,1,1]]
解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]];
然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]
示例 2:
输入: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
输出: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
解释: 首先翻转每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]];
然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
class Solution(object):
def flipAndInvertImage(self,nums):
A =[]
for i in range(len(nums)):
A.append(nums[i][::-1])
for i in range(len(A)):
for j in range(len(A[0])):
if A[i][j]==0:
A[i][j]=1
else:
A[i][j]=0
return A
nums = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
solution = Solution()
print solution.flipAndInvertImage(nums)
#nums = [[1,1,0],[1,0,1],[0,0,0]]
nums = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
solution = Solution()
print solution.flipAndInvertImage(nums)
#方法二
#Solution:(定义两个指针,对每一行的元素进行交换,然后遍历每一行,对当前元素进行反转,最后返回数组A)
class Solution(object):
def flipAndInvertImage(self, A):
"""
:type A: List[List[int]]
:rtype: List[List[int]]
"""
for k in range(len(A)):
i, j = 0, len(A[k])-1
while i < j:
A[k][i], A[k][j] = A[k][j], A[k][i]
j -= 1
i += 1
for i in range(len(A[k])):
A[k][i] = 0 if A[k][i] == 1 else 1
return A
575、分糖果
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 1:
输入: candies = [1,1,2,2,3,3]
输出: 3
解析: 一共有三种种类的糖果,每一种都有两个。最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
示例 2 :
输入: candies = [1,1,2,3]
输出: 2
解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
from collections import Counter
class Solution(object):
def distributeCandies(self,num):
set_num = set(num)
#set_num = Counter(num)
if len(set_num) > len(num)//2:
return len(num) //2
else:
return len(set_num)
num = [1,1,2,2,3,3]
solution = Solution()
print solution.distributeCandies(num)
#方法二
class Solution(object):
def distributeCandies(self, candies):
"""
:type candies: List[int]
:rtype: int
"""
# set(candies)表示糖果的种类数,len(candies)/2表示糖果总数的一半,若
# 糖果种类小,则直接返回种类个数,因为剩下的全是重复的;若总数的一半小,说明
# 种类还有剩余,但妹妹无法再拿了,最多只能由总数的一半的种类个数
return min(len(set(candies)), len(candies) / 2)