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

題目一:陣列排序
給定一個排序陣列,你需要在 原地 洗掉重復出現的元素,使得每個元素只出現一次,回傳移除后陣列的新長度,
示例 1:
給定陣列 nums = [1,1,2], 函式應該回傳新的長度 2, 并且原陣列 nums 的前兩個元素被修改為 1, 2,
你不需要考慮陣列中超出新長度后面的元素,
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4], 函式應該回傳新的長度 5, 并且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4, 你不需要考慮陣列中超出新長度后面的元素,
答案一:
var removeDuplicates = function(nums) {
let arr = [];
for(let i=0;i<nums.length;i++){
let bind = true;
for(let j=0;j<arr.length;j++){
if(nums[i] == arr[j]){
bind = false;
}
}
if(bind == true){
arr.push(nums[i]);
}
}
return nums;
};
這個答案比較好理解,就是回圈后放入一個新陣列就行,單如果題目里加上這個呢?
不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 并在使用 O(1) 額外空間的條件下完成,
答案二:
var removeDuplicates = function(nums) {
for(let i=0;i<nums.length;i++){
for(let j=i+1;j<nums.length;j++){
if(nums[i] == nums[j]){
nums.splice(j,1);
j--;
}
}
}
return nums;
};
答案三:
let index = 0;
var removeDuplicates = function(nums) {
if(nums[index] == nums[index+1]){
if(nums.length == index)
return nums
nums.splice(index, 1);
}else{
index++;
}
removeDuplicates(nums);
};
題目二:貪心演算法
給定一個陣列,它的第 i 個元素是一支給定股票第 i 天的價格, 設計一個演算法來計算你所能獲取的最大利潤,你可以盡可能地完成更多的交易(多次買賣一支股票), 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票),
示例 1:
輸入: [7,1,5,3,6,4] 輸出: 7 解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 , 隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 ,
示例 2:
輸入: [1,2,3,4,5] 輸出: 4 解釋: 在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 , 注意你不能在第 1 天和第 2 天接連購買股票,之后再將它們賣出, 因為這樣屬于同時參與了多筆交易,你必須在再次購買前出售掉之前的股票,
示例 3:
輸入: [7,6,4,3,1] 輸出: 0 解釋: 在這種情況下, 沒有交易完成, 所以最大利潤為 0,
答案:
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let num = 0;
for(let i=0;i<prices.length;i++){
for(let j=i+1;j<prices.length;j++){
if(prices[i] < prices[j]){
num += prices[j] - prices[i];
i = j-1;
break;
}else{
i = j;
}
}
}
return num;
};
如果對你有幫助,請你點個推薦,我會和你一起進步,加油(*^▽^*),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/253901.html
標籤:JavaScript
上一篇:3D餅/環Echarts圖的實作
下一篇:原始模式和工廠模式
