生活随笔
收集整理的這篇文章主要介紹了
Leetcode题库 798.得分最高的最小轮调(差分数组 C实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
算法一 雙層循環
時間復雜度:n^2
空間復雜度:n
int bestRotation(int* nums
, int numsSize
){char Differ_L
[numsSize
];int Temp
;int Temp_Score
;int Index
;int Score
;Index
=0;Score
=0;for(int i
=0;i
<numsSize
;i
++){nums
[i
]=i
-nums
[i
];if(nums
[i
]>=0) Score
++;}for(int i
=1;i
<numsSize
;i
++){Temp_Score
=0;Temp
=nums
[0];for(int j
=0;j
<numsSize
-1;j
++){nums
[j
]=nums
[j
+1]-1;if(nums
[j
]>=0) Temp_Score
++;}nums
[numsSize
-1]=Temp
+numsSize
-1;if(nums
[numsSize
-1]>=0) Temp_Score
++;if(Temp_Score
>Score
){Index
=i
;Score
=Temp_Score
;}return Index
;}
算法二 差分數組
時間復雜度:n
空間復雜度:n
int bestRotation(int* nums
, int numsSize
){int ret
=0;int Differ
[numsSize
];for(int i
=0;i
<numsSize
;i
++){Differ
[i
]=0;}for(int i
=0;i
<numsSize
;i
++){if(i
>=nums
[i
]){Differ
[0]++;if(i
-nums
[i
]+1<numsSize
) Differ
[i
-nums
[i
]+1]--;if(i
+1<numsSize
) Differ
[i
+1]++;}else{Differ
[i
+1]++;if(numsSize
-nums
[i
]+i
+1<numsSize
) Differ
[numsSize
-nums
[i
]+i
+1]--;}}for(int i
=1;i
<numsSize
;i
++){Differ
[i
]+=Differ
[i
-1];if(Differ
[i
]>Differ
[ret
]) ret
=i
;}return ret
;
}
總結
以上是生活随笔為你收集整理的Leetcode题库 798.得分最高的最小轮调(差分数组 C实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。