力扣题-9.25
力扣题1:453. 最小移动次数使数组元素相等
解题思想:使得n-1个元素增加1,相当于对1个数进行-1操作,因此只要所有数都进行-1操作一直到与最小的数一样大即可。
class Solution(object):
def minMoves(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums = sorted(nums)
temp = 0
for i in nums:
temp = temp + i
return temp-len(nums)*nums[0]
class Solution {
public:
int minMoves(vector<int>& nums) {
std::sort(nums.begin(), nums.end());
int temp = 0;
for (int num : nums) {
temp += num;
}
return temp-nums.size()*nums[0];
}
};
力扣题2:665. 非递减数列
解题思想:对数组的修改只有两种,例如[3,4,2,3],判断出4>2之后,第一种修改为[3,2,2,3],第二种修改为[3,4,4,3],对两种修改只要有一种能是非递减数列即可,两种都不符合返回False。
class Solution(object):
def checkPossibility(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
flag = 0
result = 0
for i in range(1,len(nums)):
if nums[i-1]>nums[i]:
flag = flag+1
temp = nums[i-1]
nums[i-1] = nums[i]
for j in range(1,len(nums)):
if nums[j-1]>nums[j]:
result = 1
break
if result==0:
return True
nums[i] = temp
nums[i-1] = temp
result=0
for j in range(1,len(nums)):
if nums[j-1]>nums[j]:
return False
if result==0:
return True
if result==0:
return True
return False
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int flag =0;
int result=0;
int temp=0;
for (int i=1;i<nums.size(); i++) {
if (nums[i - 1] > nums[i]) {
flag = flag+1;
temp = nums[i-1];
nums[i-1] = nums[i];
for (int j =1;j<nums.size();j++){
if (nums[j-1]>nums[j]){
result=1;
break;
}
}
if (result==0){
return true;
}
nums[i] = temp;
nums[i-1] = temp;
result=0;
for (int j =1;j<nums.size();j++){
if (nums[j-1]>nums[j]){
return false;
}
}
if (result==0){
return true;
}
}
}
if (result==0){
return true;
}
return false;
}
};
力扣题3:283. 移动零
解题思想:将两个下标进行移动,其中i为写入的下标,j为遍历的下标,如果nums[j]为0,则不进行写入,继续遍历;如果nums[j]不是0,则将nums[j]写入到对应下标i的位置;最后将末尾都补成0。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
i = 0
j = 0
while j<len(nums):
if nums[j]==0:
j=j+1
else:
nums[i]=nums[j]
i=i+1
j=j+1
while i<len(nums):
nums[i] = 0
i=i+1
return nums
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i = 0;
int j = 0;
int length = nums.size();
while (j<length){
if (nums[j]==0){
j=j+1;
}
else{
nums[i]=nums[j];
i=i+1;
j=j+1;
}
}
while (i<length){
nums[i] = 0;
i=i+1;
}
}
};