我的思路:
排除特殊情況,若是判斷陣列為空或長度為0,則直接返回0
將給定陣列排序
迴圈遍歷陣列,範圍是從0到(nums-1)
比較當前索引對應的值和索引是否相等,若不相等,則返回當前索引,即為陣列中缺失的值
若迴圈順利,則說明陣列前面不缺數字,只能是最後卻少乙個,正好是 i,所以返回 i
對應程式
public
intmissingnumber
(int
nums)
//2 arrays.
sort
(nums)
;//3
int i =0;
for(
; i < nums.length; i++)}
//5return i;
}
定義乙個變數,用來求陣列所有元素的和
迴圈遍歷求出和
返回 (1+nums.length)*nums.length/2 -num
對應程式
public
intmissingnumber
(int
nums)
//3return(1
+nums.length)
*nums.length/
2-num;
}
有的人可能看著上面的第三條思路有點懵,哈哈哈,別急聽我給你仔細道來
既然乙個陣列它只缺少乙個元素,那我們是不是就可以求得他不缺少元素的和呢??
舉個例子:
完整的陣列:【0,1,2,3,4,5,6】
所給的陣列:【0,1, ,3,4,5,6】
求和公式:(首項 + 末相)* 項數 / 2
我們可以通過求和公式求出完整陣列的和,(因為加0等於沒加,所以可以取掉0)而首相就是1,末項就是nums.length,項數也是nums.length(取0後項數正好是nums.length)。而缺少的就是完整陣列的和減去所給陣列的和!!
我的思路:
這個題用插入排序的思路,將0全部插入到陣列尾部即可
迴圈遍歷整個陣列
判斷此時的元素是否為0
2.1 若是為0,則將後面的元素用迴圈依次往前移動,最後將0插入在最後乙個
2.2若是不為0,則遍歷下乙個元素
(ps:這個思路一定要注意第一層迴圈遍歷的條件要設為乙個變數,當元素為0插入陣列尾部後,將變數減一,不然當迴圈到尾部時,會成為死迴圈)
對應程式
public
void
movezeroes
(int
nums)
nums[j]
= temp;
a--;}
else
}}
雖然用插入排序很好寫,但是還是老問題,時間複雜度太高,所以又去發現了一種新解法
其他思路
得到陣列中非零元素的個數num
將陣列的前num項按順序替換為陣列中的非零元素
將陣列中剩餘的位置用0替代
public
void
movezeroes
(int
nums)
}//3
for(
int i=index;i
)}
這樣寫出來後,瞬間時間複雜度就降低了好多,所以以後在遇到題,一定要多思考,看是不是又更好的解法,盡量達到自己能力範圍內的最優解
我的思路:
首先先將陣列排序,在定義乙個變數,迴圈遍歷陣列,將相同數的個數累計,若是個數大於n/2則返回這個數
陣列排序
定義乙個變數用於相同數的計數
迴圈遍歷整個陣列
若是迴圈到陣列的最後乙個元素,還沒有求出眾數,則直接返回最後乙個數(題目假設給定陣列必有眾數)
若不是最後乙個元素,則判斷是否與後乙個元素相等,不相等再判斷這個元素的個數是否大於n/2,大於就直接返回此元素
public
intmajorityelement
(int
nums)
//5else
if(nums[i]
!= nums[i+1]
) index =0;
}}return0;
}
本題的思想又叫蠕蟲思想,就是迴圈一遍看相等的元素的長度,若是大於n/2就是那個元素! leetcode刷題記錄
我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...
LeetCode刷題記錄
動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...
leetcode刷題記錄
工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...