leetcode例题
389找不同
给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
示例:
输入:
s = "abcd" t = "abcde"
输出:e
解释:
'e' 是那个被添加的字母。
leetcode-cn.com/problems/fi…
解题思路1
用map存放s的各个字符的频率,然后遍历t的时候逐一减去,直到遇到减为0或者不存在的键就输出。
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
let findTheDifference = function(s, t) {
let map = {};
for(let i = 0; i < s.length; i++){
map[s[i]] = !map[s[i]] ? 1 : map[s[i]] + 1 ;
}
for(let j = 0; j < t.length; j++){
if(!map[t[j]] || map[t[j]] ===0)
return t[j];
map[t[j]]--;
}
};
解题思路2
位运算,把两个字符串看成一个字符串,问题就转化成在一个字符串找出现奇数次的字符(s和t中的字符只有一个不一样),所以采用异或方法(同为0异为1),异或所有字符字符之后结果就是那个不同的字符。
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
let findTheDifference = function(s, t) {
let res = t[0];
for(let i = 0; i < s.length; i++){
res = res ^ s[i];
}
for(let j = 1; j < t.length; j++){
res = res ^ t[j];
}
return res;
};
350.两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。
leetcode-cn.com/problems/in…
解题思路
使用两个Map分别存储两个数组中各个数字的频率,然后遍历其中一个map,如果这个键在两个map中都出现就返回小的那个个数。
另一种解法解法是先排序,然后使用两个指针遍历两个数组。如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,将该数字添加到答案,并将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) {
let map1 = {};
let map2 = {};
let res = [];
for(let i = 0; i < nums1.length; i++){
map1[nums1[i]] = map1[nums1[i]] ? map1[nums1[i]]+1 : 1;
}
for(let i = 0; i < nums2.length; i++){
map2[nums2[i]] = map2[nums2[i]] ? map2[nums2[i]]+1 : 1;
}
for(let num in map1){
if(map2[num]){//对应的数在nums2中也存在
let min = Math.min(map1[num], map2[num]);
while(min--){
res.push(num);
}
}
}
return res;
};
122 买卖股票的最佳时机
给定一个数组,它的第 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。
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii
思路解析
贪心算法:只要比前一天的价格大就在(昨天买入)今天卖出。
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let pro = 0;
for( let i = 1; i < prices.length; i++){
if(prices[i] > prices[i-1]){
pro += (prices[i] - prices[i-1]);
}
}
return pro;
};
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!