19. 删除链表的倒数第 N 个结点

各个排序的时间复杂度

41. 缺失的第一个正数

  1. const firstMissingPositive = nums => {
  2. const len = nums.length;
  3. for (let i = 0; i < len; i++) {
  4. // 将nums[i]放到对应的位置
  5. while (nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] !== nums[i]) {
  6. [nums[nums[i] - 1], nums[i]] = [nums[i], nums[nums[i] - 1]];
  7. }
  8. }
  9. // 遍历是否是对应位置
  10. for (let i = 0; i < len; i++) {
  11. if (nums[i] !== i + 1) return i + 1;
  12. }
  13. return len + 1;
  14. };

1143. 最长公共子序列

  1. var longestCommonSubsequence = function(text1, text2) {
  2. const m = text1.length, n = text2.length;
  3. const dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));
  4. for (let i = 1; i <= m; i++) {
  5. const c1 = text1[i - 1];
  6. for (let j = 1; j <= n; j++) {
  7. const c2 = text2[j - 1];
  8. if (c1 === c2) {
  9. dp[i][j] = dp[i - 1][j - 1] + 1;
  10. } else {
  11. dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
  12. }
  13. }
  14. }
  15. return dp[m][n];
  16. };

151. 翻转字符串里的单词

  1. var reverseWords = function(s) {
  2. return s.trim().split(/\s+/).reverse().join(' ');
  3. };

349. 两个数组的交集

  1. const set_intersection = (set1, set2) => {
  2. if (set1.size > set2.size) {
  3. return set_intersection(set2, set1);
  4. }
  5. const intersection = new Set();
  6. for (const num of set1) {
  7. if (set2.has(num)) {
  8. intersection.add(num);
  9. }
  10. }
  11. return [...intersection];
  12. }
  13. var intersection = function(nums1, nums2) {
  14. const set1 = new Set(nums1);
  15. const set2 = new Set(nums2);
  16. return set_intersection(set1, set2);
  17. };

169. 多数元素

  1. var majorityElement = function(nums) {
  2. const map = new Map()
  3. for(let num of nums) {
  4. if (!map.get(num)) {
  5. map.set(num, 1)
  6. } else {
  7. map.set(num, map.get(num) + 1)
  8. }
  9. }
  10. for(const [key, value] of map) {
  11. if (value > nums.length / 2) {
  12. return key
  13. }
  14. }
  15. };