题目一:玩筹码(难度:简单)
有 n 个筹码。第 i 个筹码的位置是 position[i] 。
我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i 个筹码的位置从 position[i] 改变为:
position[i] + 2 或 position[i] - 2 ,此时 cost = 0
position[i] + 1 或 position[i] - 1 ,此时 cost = 1
返回将所有筹码移动到同一位置上所需要的 最小代价 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-cost-to-move-chips-to-the-same-position
思路:统计奇数和偶数的个数取最小值即可
class Solution(object):
def minCostToMoveChips(self, position):
a = 0
b = 0
for i in position:
if i & 1 == 1:
a += 1
else:
b += 1
return min(a, b)
题目二:移除元素(难度:简单)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
思路:通过while循环遍历数组,相同则使用del删除列表中元素,同时保持下标不变。
class Solution(object):
def removeElement(self, nums, val):
index=0
while index<len(nums):
if val==nums[index]:
del nums[index]
continue
index+=1
return len(nums)
题目三:在排序数组中查找元素的第一个和最后一个位置(难度:中等)
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array
思路:通过二分查找的思路即可解决
def search(nums,target):
left = 0
right = len(nums)-1
while left<=right:
mid = (left+right)/2
if nums[mid] >= target:
right = mid-1
if nums[mid] < target:
left = mid+1
return left
class Solution(object):
def searchRange(self, nums, target):
left = search(nums,target)
right = search(nums,target+1)
if left == len(nums) or nums[left] != target:
return [-1,-1]
else:
return [left,right-1]
题目四:旋转图像(难度:中等)
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/rotate-image
思路:先上下交换再对角交换
class Solution(object):
def rotate(self, matrix):
for i in range(len(matrix)/2):
matrix[i],matrix[len(matrix)-1-i]=matrix[len(matrix)-1-i],matrix[i]
for i in range(len(matrix)):
for j in range(i,len(matrix)):
matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
题目五:加一(难度:简单)
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/plus-one
思路:从后遍历数组,逢十进一,如果有进位则将第一位改为1,数组末尾添加一个0即可。
class Solution(object):
def plusOne(self, digits):
n=len(digits)-1
digits[n]+=1
index=0
while n>=0:
if digits[n]==10:
index+=1
digits[n]=0
if n-1>=0:
n-=1
digits[n]+=1
else:
break
if index==len(digits):
digits[0]=1
digits.append(0)
return digits