LeetCode刷题(四)
LeetCode 是个著名的编程题库,里边有很多面试、算法题目,多刷刷对提高编程水平很有帮助,避免因为天天写业务代码而停滞不前。最近玩了下挺有意思的,决定慢慢的刷起来,在这里记录一下我的刷题过程。相关资料:我的LeetCode我的GitHub备注:先从简单的开始刷,简单记录每道题的题目,解法和思路。因为之前并没有什么算法基础,所以很多解法可能并不是最优解。先把重点放在解题,...
·
LeetCode 是个著名的编程题库,里边有很多面试、算法题目,多刷刷对提高编程水平很有帮助,避免因为天天写业务代码而停滞不前。最近玩了下挺有意思的,决定慢慢的刷起来,在这里记录一下我的刷题过程。
相关资料:
备注:
- 先从简单的开始刷,简单记录每道题的题目,解法和思路。
- 因为之前并没有什么算法基础,所以很多解法可能并不是最优解。
- 先把重点放在解题,故有些变量名并不严谨,但代码其他方面都尽可能遵循了规范,并使用ES6+的新特性。
题目
思路
ASCII,分情况判断。
解法
/**
* @param {string} word
* @return {boolean}
*/
var detectCapitalUse = function(word) {
const firstA = word.charCodeAt(0) >= 65 && word.charCodeAt(0) <= 90;
let list = word.split('');
list.shift();
const allA = list.every(i => {
return i.charCodeAt(0) >= 65 && i.charCodeAt(0) <= 90;
});
const alla = list.every(i => {
return i.charCodeAt(0) >= 97 && i.charCodeAt(0) <= 122;
});
if (firstA && !allA && !alla) {
return false;
} else if (!firstA && !alla) {
return false;
} else {
return true;
}
};
题目
思路
取较长的数组和较短的数组,以提高性能。长数组加分隔号变为字符串。短数组遍历每项加分隔号查找是否存在。最后去重。
解法
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
const shortList = nums1.length > nums2.length ? nums2: nums1;
const longList = nums1.length > nums2.length ? nums1: nums2;
const longStr = '|' + longList.join('|') + '|';
let result = shortList.filter(i => {
return longStr.indexOf(`|${i}|`) >= 0;
});
return Array.from(new Set(result));
};
题目
思路
循环findNums,找到每个元素在nums中的index,获取nums中,index右侧的元素组成的数组。在其中找到第一个符合题意的元素,找不到就给-1。
解法
/**
* @param {number[]} findNums
* @param {number[]} nums
* @return {number[]}
*/
var nextGreaterElement = function(findNums, nums) {
let resultList = [];
findNums.forEach((item, index) => {
const numsIndex = nums.findIndex(i => {
return i === item;
});
const copyList = nums.map(n => n);
copyList.splice(0, numsIndex);
let result = copyList.find(c => {
return c > item;
});
result = result ? result : -1;
resultList.push(result);
});
return resultList;
};
题目
思路
判断x是否>=0,大于零则直接反转,小于零则去掉负号-,然后反转。取最大最小值,最后得出结果时溢出则返回0。
解法
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
const max = Math.pow(2,31) - 1;
const min = Math.pow(-2,31);
const a = x >= 0;
let result = 0;
if (a) {
result = +(x + '').split('').reverse().join('');
} else {
let absList = (x + '').split('');
absList.splice(0, 1);
absList.reverse();
const str = '-' + absList.join('');
result = +str;
}
return result < max && result > min ? result : 0;
};
题目
思路
转map,key为数字,value为出现次数。遍历map获取符合条件的众数。
解法
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let map = {};
nums.forEach(i => {
map[i] !== undefined ? map[i]++ : map[i]=1;
});
let result = 0;
for (i in map) {
if (map[i] > nums.length / 2) {
result = i;
}
}
return +result;
};
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)