1144. 遞減元素使數(shù)組呈鋸齒狀
1.想法
1.要形成鋸齒狀,那么一定是奇數(shù)大于偶數(shù),或者偶數(shù)大于奇數(shù)
2.不論是奇數(shù)還是偶數(shù),都滿足nums[i]<nums[i-1]&nums[i]<nums[i+1]
如果不滿足,那么就需要盡心調(diào)整,
1.nums[i]大于nums[i+1]或nums[i-1] 那么只需調(diào)整一次,變成nums[i] = 大于的那個(gè)數(shù)-1就行了
2.nums[i]大于nums[i+1]且nums[i-1] 那么需調(diào)整兩次,變成nums[i] =min(nums[i-1],nums[i+1])-1就行了
綜上,我們需要計(jì)算偶數(shù)大于和奇數(shù)大于的次數(shù),進(jìn)行比較返回
2:代碼
class Solution {
public int movesToMakeZigzag(int[] nums) {
int temp0 = 0, temp1 = 0;//分別記錄當(dāng)為0或者1的時(shí)候的減去值
int i0 = 0, i1 = 1; //分別是奇數(shù)和偶數(shù)的索引
//計(jì)算偶數(shù)大于奇數(shù)的修改的次數(shù)
while (i1 < nums.length) {
int temp = nums[i1];
if (temp >= nums[i1 - 1]) {
temp0 += temp - nums[i1 - 1] + 1;
temp = nums[i1 - 1] - 1;
}
if (i1 + 1 < nums.length) {
if (temp >= nums[i1 + 1]) {
temp0 += temp - nums[i1 + 1] + 1;
temp = nums[i1+1]-1;
}
}
i1 += 2;
}
//計(jì)算奇數(shù)大于偶數(shù)的修改次數(shù)
while (i0 < nums.length) {
int temp = nums[i0];
if (i0 - 1 >= 0) {
if (temp >= nums[i0 - 1]) {
temp1 += temp - nums[i0 - 1] + 1;
temp = nums[i0-1]-1;
}
}
if (i0 + 1 < nums.length) {
if (temp >= nums[i0 + 1]){
temp1 += temp - nums[i0 + 1] + 1;
temp=nums[i0+1]-1;
}
}
i0 += 2;
}
return temp0 > temp1 ? temp1 : temp0;
}
}
總結(jié):這道題本身沒(méi)有多少難度,但是作為測(cè)驗(yàn)題,卻又很多人沒(méi)有通過(guò),通過(guò)率很低
image.png
說(shuō)明了人在高度緊張的時(shí)候會(huì)犯低級(jí)錯(cuò)誤,唯有平靜心態(tài)才能取得勝利