LeetCode題目初級決議(陣列,排序)
- 88題:合并兩個有序陣列
- 問題描述
- 決議
- JavaScript代碼實作
- 169題:多數元素
- 問題描述:
- 決議
- JavaScript代碼實作
- 217題:存在重復的元素
- 問題描述
- 決議
- JavaScript代碼實作
- 268題:丟失的數字
- 問題描述:
- 決議
- JavaScript代碼實作
- 總結
88題:合并兩個有序陣列
問題描述
給你兩個按 非遞減順序 排列的整數陣列 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目,
請你 合并 nums2 到 nums1 中,使合并后的陣列同樣按 非遞減順序 排列,
注意:最終,合并后陣列不應由函式回傳,而是存盤在陣列 nums1 中,為了應對這種情況,nums1 的初始長度為 m + n,其中前 m 個元素表示應合并的元素,后 n 個元素為 0 ,應忽略,nums2 的長度為 n ,
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-sorted-array

決議
由于兩個陣列都是有序的,我們可以直接將一個陣列放在另一個陣列的后面,然后進行排序,我使用的插入排序,
JavaScript代碼實作
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
for(var i=0;i<n;i++){
nums1[m+i]=nums2[i];
}
for(var i=1;i<n+m;i++){
for(var j=i;j>0;j--){
if(nums1[j-1]>nums1[j]){
var temp = nums1[j-1];
nums1[j-1]=nums1[j];
nums1[j]=temp;
}
}
}
};
169題:多數元素
問題描述:
給定一個大小為 n 的陣列,找到其中的多數元素,多數元素是指在陣列中出現次數 大于 ? n/2 ? 的元素,
你可以假設陣列是非空的,并且給定的陣列總是存在多數元素,
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/majority-element

決議
題目中說的總存在次數 大于 ? n/2 ? 的元素,我們可以吧陣列中每個元素出現的次數統計出來,并存入另一個陣列中,在找出出現最多的元素下標,再回傳該下標對應的元素,
JavaScript代碼實作
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var temp = new Array();
for(var i=0;i<nums.length;i++){
var s = 0;
temp[i] = 0;
for(var j=0;j<nums.length;j++){
if(nums[i]==nums[j]){
s++;
}
}
temp[i] = s;
}
var max = 0;
for(var a = 0;a<temp.length;a++){
if(temp[a]>max){
max = temp[a]
}
}
var q = 0;
for(var b=0;b<temp.length;b++){
if(max==temp[b]){
q = b;
}
}
return nums[q];
};
217題:存在重復的元素
問題描述
給定一個整數陣列,判斷是否存在重復元素,
如果存在一值在陣列中出現至少兩次,函式回傳 true ,如果陣列中每個元素都不相同,則回傳 false ,

決議
這個題目和上面多數元素一樣,我們先把重復的數統計出來,由于每次是從頭到尾全部遍歷的所以我們統計出來的會多統計一次(它本身),然后判斷統計出來的數字,為了防止多次列印,設定一個哨兵,大于一的然它加一,最后判斷哨兵如果大于0就回傳true,否則回傳false,
JavaScript代碼實作
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
var nums1 = new Array();
var s=0;
var x = 0;
for(var i=0;i<nums.length;i++){
nums1[i]=0;
s=0;
for(var j=0;j<nums.length;j++){
if(nums[i]==nums[j]){
s++;
}
}
nums1[i]=s;
if(nums1[i]>1){
x++;
}
}
if(x>0){
return true;
}else{
return false;
}
};
268題:丟失的數字
問題描述:
給定一個包含 [0, n] 中 n 個數的陣列 nums ,找出 [0, n] 這個范圍內沒有出現在陣列中的那個數,

決議
通過題目我們可知,數字范圍在[0,length],缺少的是范圍內的一個數,我們可以將陣列中所以的數加起來在減去從1一直加到length的和,回傳時我們取"-"號,這樣就可以把缺少的那個數找出來,
JavaScript代碼實作
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
var sum = 0;
var j=1;
for(var i=0;i<nums.length;i++){
sum +=nums[i]-j;
j++;
}
return -sum;
};
總結
1、對于統計,我們應該注意歸零,防止未歸零就開始下一次的統計,
2、對于回圈陳述句,我們應該盡可能的控制它的回圈次數,避免重復回圈和無意義的回圈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/347156.html
標籤:其他
