這里介紹排序演算法及貪心演算法的個人解決方法

題目一:兩個陣列的交集
給定兩個陣列,撰寫一個函式來計算它們的交集,
示例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2,2]
示例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[4,9]
說明:
輸出結果中每個元素出現的次數,應與元素在兩個陣列中出現次數的最小值一致, 我們可以不考慮輸出結果的順序,
進階:
如果給定的陣列已經排好序呢?你將如何優化你的演算法? 如果 nums1 的大小比 nums2 小很多,哪種方法更優? 如果 nums2 的元素存盤在磁盤上,記憶體是有限的,并且你不能一次加載所有的元素到記憶體中,你該怎么辦?
答案:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) {
var arr = [];
for(let i = 0;i<nums1.length;i++){
let bind = true;
for(let j = 0;j<nums2.length;j++){
if(nums1[i] == nums2[j] && bind == true){
arr.push(nums1[i]);
nums2.splice(j,1);
j--;
bind = false;
break;
}
}
}
return arr;
};
題目二:加一
給定一個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一, 最高位數字存放在陣列的首位, 陣列中每個元素只存盤單個數字, 你可以假設除了整數 0 之外,這個整數不會以零開頭,
示例 1:
輸入:digits = [1,2,3] 輸出:[1,2,4] 解釋:輸入陣串列示數字 123,
示例 2:
輸入:digits = [4,3,2,1] 輸出:[4,3,2,2] 解釋:輸入陣串列示數字 4321,
示例 3:
輸入:digits = [0] 輸出:[1]
答案:
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
let length = digits.length - 1;
let bind = true;
for(let i=digits.length-1;i>=0;i--){
if(bind == true && digits[i] < 9){
bind = false;
digits[i] = digits[i]+1;
}else if(digits[i] == 9 && bind == true){
digits[i] = 0;
}
}
if(bind == true){
digits.unshift(1);
}
return digits;
};
題目三:移動零
給定一個陣列 nums,撰寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序,
示例:
輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0]
說明:
必須在原陣列上操作,不能拷貝額外的陣列, 盡量減少操作次數,
答案:
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let num = 0;
for(let i=0;i<nums.length;i++){
if(nums[i] == 0){
nums.splice(i,1);
num++;
i--;
}
}
if(num != 0){
for(let j =0;j<num;j++){
nums.push(0);
}
}
};
如果對你有幫助,請你點個推薦,我會和你一起進步,加油(*^▽^*),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/255536.html
標籤:其他
