由于本周的題目比較簡單妒牙,又很相似戚篙,于是就來上兩道吧,兩道題的難度級別都是"Easy"
題目:給一個有序的數(shù)組撒汉,將其按照不重復(fù)的數(shù)字重新排序,并返回排序后數(shù)組的長度(不要為其他的數(shù)組開辟新的空間涕滋,就在這段數(shù)組已占用的內(nèi)存中操作)
思路:因為C語言沒有刪除數(shù)組的API,所以我一開始是將重復(fù)的刪掉睬辐,把后面不重復(fù)的數(shù)字往前移,發(fā)現(xiàn)效率太低宾肺,比python寫的效率還低溯饵,后來發(fā)現(xiàn)其實不需要每發(fā)現(xiàn)一個重復(fù)的都將其后面的往前移,只要遍歷一次锨用,將其重新排序即可丰刊,具體看代碼:
int removeDuplicates(int* nums, int numsSize) {
if (numsSize <= 1) return numsSize;
//j為新的順序,因為第0個肯定不會重復(fù)增拥,所以從第1個開始
int j = 1;
for (int i = 0; i < numsSize - 1; i++)
//如果不是重復(fù)的就將其排在新的位置上
if (nums[i] != nums[i+1]) nums[j++] = nums[i+1];
return j;//由于是j++啄巧,所以直接返回新的長度j即可
}
很簡單,我們來看下一道
題目:給一個數(shù)組和一個特定的數(shù)字掌栅,刪除數(shù)組里所有這個數(shù)字秩仆。重新排序,返回新數(shù)組的長度(不要為其他的數(shù)組開辟新的空間猾封,就在這段數(shù)組已占用的內(nèi)存中操作)
思路:和上一道基本一樣澄耍,直接看代碼吧:
int removeElement(int* nums, int numsSize, int val) {
//因為這次是和val比較,所以要從第0位開始
int j = 0;
for (int i = 0; i < numsSize; i++)
//如果不等于val晌缘,則放到新的位置上
if (nums[i] != val) nums[j++] = nums[i];
return j;
}
此兩道題的效率中上齐莲。