Leetcode 149 多数元素 | 买卖股票的最佳时机
·
今天有点小累,来两道easy题打卡吧,明天接着动态规划。
1 题目
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
提示:
n == nums.length1 <= n <= 5 * 104-109 <= nums[i] <= 109- 输入保证数组中一定有一个多数元素。
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
2 代码实现
c++
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map <int ,int > numsCount ;
for (int num: nums){
numsCount [num] ++ ;
if (numsCount [num] > nums.size() / 2 ){
return num ;
}
}
return -1 ;
}
};
js
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
const numsCount = new Map() ;
const half = Math.floor(nums.length / 2 )
for (const num of nums){
numsCount.set(num, (numsCount.get(num) || 0) + 1);
if (numsCount.get(num) > half){
return num;
}
}
return -1 ;
};
3 题目
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 1050 <= prices[i] <= 104
4 代码实现
c++
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
int minPrice = INT_MAX ;
int maxPro = 0 ;
for (int i = 0 ; i < n ; i++){
int curPro = prices[i] - minPrice ;
minPrice = min (minPrice , prices[i]);
maxPro = max (curPro , maxPro );
}
return maxPro ;
}
};
js
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
const n = prices.length ;
let minPrice = Number.MAX_SAFE_INTEGER ;
let maxPro = 0 ;
for (let i = 0 ; i < n ; i++){
let curPro = prices[i] - minPrice ;
minPrice = Math.min (minPrice , prices[i]);
maxPro = Math.max(curPro , maxPro);
}
return maxPro ;
};
5 小结
纯打卡,没有太多内容,需要熟悉js的hash表写法。注意细节,这些题目非常简单。
更多推荐


所有评论(0)