SOURCE

// 这题一看就是 计数问题,题目中如果存在一值在数组中出现至少两次,
// 句话就告诉我们记录每一个数字出现的次数就能解决问题了。

// const containDuplicate = function(nums) {
//     let map = new Map();
//     for(let i of nums) {
//         if(map.has(i)) {
//             return true;
//         }
//         else {
//             map.set(i, 1);
//         }
//     }
//     return false;
// }



// 字符串中的第一个唯一字符
// const fristUniqChar = function(str) {
//     let mapObj = {};
//     for(let i of str) {
//         console.log(i);
//         mapObj[i] = (mapObj[i] || 0) + 1;
//         console.log('---', mapObj[i]);
//     }
//     console.log('---', mapObj);
//     for(let j = 0; j < str.length; j++) {
//         if(mapObj[str[j]] === 1) {
//             return j;
//         }
//     }
//     return -1;
// }

// const s = "loveleetcode";
// const result = fristUniqChar(s);
// console.log('结果', result);




// 有效的字母异位词
// 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 
// 输入: s = "anagram", t = "nagaram"
// 输出: true

// const isAngram = function(s, t) {
//     const sLen = s.length;
//     const tLen = t.length;
//     if(sLen !== tLen) {
//         return false;
//     }

//     const obj = {};
//     for(let i = 0; i < sLen; i++) {
//         const curS = s[i];
//         const curT = t[i];
//         obj[curS] ? obj[curS]++ : obj[curS] = 1;
//         console.log('----', obj);
//         obj[curT] ? obj[curT]-- : obj[curT] = -1;
//         console.log('++++++', obj);
//     }

//     return Object.values(obj).every(v => v === 0);
// }

// const s = "anagram";
// const t = "nagaram";
// const res = isAngram(s, t);
// console.log(res);




// 输入:nums = [2,7,11,15], target = 9
// 输出:[0,1]
// 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
// 用 hashMap 存储遍历过的元素和对应的索引。 每遍历一个元素,看看 hashMap
//  中是否存在满足要求的目标数字。 所有事情在一次遍历中完成(用了空间换取时间)

// const findTarget = function(nums, target) {
//     // 构建哈希表 存储方式 {need, index}
//     // 1. 构造哈希表
//     const map = new Map(); // 存储方式 {need, index}

//     // 2. 遍历数组
//     for (let i = 0; i < nums.length; i++) {
//         // 2.1 如果找到 target - nums[i] 的值
//         if (map.has(nums[i])) {
//             return [map.get(nums[i]), i];
//         } else {
//             // 2.2 如果没找到则进行设置
//             map.set(target - nums[i], i);//把i需要的那个数的hash表的位置填上i =>对应上面get(nums[i])
//         }
//     }
//     // let mapNums = {};
//     // for(let i = 0; i < nums.length; i++) {
//     //     const curItem = nums[i];
//     //     const targetNum = target - curItem;
//     //     const targetNumIdx = mapNums[targetNum];

//     //     if(targetNumIdx !== undefined) {
//     //         return [targetNumIdx, i];
//     //     }
//     //     else {
//     //         mapNums[curItem] = i;
//     //     }
//     // }
// }

// const nums = [2,7,11,15];
// const target = 9;
// const res = findTarget(nums, target);
// console.log(res);



// 找规律题
// 最长公共前缀
// let longestCommonPrefix = function(strs) {
//     if(strs.length === 0) {
//         return '';
//     }
//     if(strs.length === 1) {
//         return strs[0]
//     }
//     return strs.reduce(getSameStr, strs[0]);
// }

// function getSameStr(a, b) {
//     let res = '';
//     for(let j = 0; j < a.length; j++) {
//         if(a[j] === b[j]) {
//             res += a[j];
//         }
//         else {
//             return res;
//         }
//     }
//     return res;
// }


// const strs = ["dog","racecar","car"]
// const res = longestCommonPrefix(strs);
// console.log(res);


// 合并两个有序链表,变为升序链表
// function ListNode(val, next) {
//     this.val = (val===undefined ? 0 : val)
//     this.next = (next===undefined ? null : next)
// }

// var mergeTwoLists = function(l1, l2) {
//       if ( l1 == null) return l2;
//       if ( l2 == null) return l1;
//     if( l1.val < l2.val){
//         l1.next = mergeTwoLists(l1.next,l2);
//         return l1
//     }else {
//         l2.next = mergeTwoLists(l1,l2.next);
//         return l2
//     }
 
// };

// const l1 = '1->2->4';
// const l2 = '1->3->4';
// const res = mergeTwoLists(l1, l2);
// console.log(res);

// let strStr = function(haystack, needle) {
//     if(needle === '') {
//         return 0;
//     }
//     for(let i = 0; i < haystack.length; i++) {
//         if(haystack[i] === needle[0]) {
//             if(haystack.substring(i, i + needle.length) === needle) {
//                 return i;
//             }
//         }
//     }
//     return -1;
// }

// const haystack = "hello", needle = "ll"
// const res = strStr(haystack, needle);
// console.log(res);


// 杨辉三角
// let generate = function(numRows) {
//     if(numRows == 0) {
//         return [];
//     }
//     const result = Array.from(new Array(numRows), () => []);

//     for(let i = 0; i < numRows; i++) {
//         result[i][0] = 1;
//         result[i][i] = 1;
//         for(let j = 1; j < i; j++) {
//             result[i][j] = result[i-1][j-1] + result[i-1][j];
//         }
//     }
//     return result;
// }

// const rows = 5;
// const res = generate(rows);
// console.log(res);


// 买卖股票的最佳价格

// const maxProfix = function(prices) {
//     let res = 0;
//     let min = prices[0];
//     for(let i = 1; i < prices.length; i++) {
//        if(prices[i] < min) {
//            min = prices[i];
//        }
//        else {
//            res = Math.max(res, prices[i] - min);
//        }
//     }
//     return res;
// }



// 买卖股票的最佳时机2
// const maxProfix = function(prices) {
//     let result = 0;
//     for(let i = 1; i < prices.length; i++) {
//         if(prices[i] > prices[i-1]) {
//             result += prices[i] - prices[i-1];
//         }
//     }
//     return result;
// }




// 反转链表
// const reverseList = function(head) {
//     let [pre, node] = [null, head];
//     while(node) {
//         const temp = node.next;
//         node.next = pre;
//         pre = node;
//         node = temp;
//     }
//     return pre;
// }




// const head = [1,2,3,4,5]
// const res = reverseList(head);
// console.log(res);

// 
// const merge = function(nums1, m, nums2, n) {
//     let len = m + n -1;
//     m--;
//     n--;
//     while(m >= 0 && n >= 0) {
//         if(nums1[m] > nums2[n]) {
//             nums1[len] = nums1[m--];
//         }
//         else {
//             nums1[len] = nums2[n--];
//         }
//         len--;
//     }
//     if(m === -1) {
//         return nums1.splice(0, len+1, ...nums2.slice(0, n + 1));
//     }
//     if(n === -1) {
//         return nums1;
//     }
// }



// 验证回文串
// const isPalindrome = function(s) {
//     s = s.replace(/[^\w]/g, '').toLowerCase();
//     let leftPointer = 0;
//     let rightPointer = s.length - 1;
//     while(rightPointer > leftPointer) {
//         if(s[leftPointer++] === s[rightPointer--]) {
//             continue;
//         }
//         else {
//             return false;
//         }
//     }
//     return true;
// }


// 移动零
// const moveZeroes = function(nums) {
//     let i = j = 0;
//     while(i < nums.length) {
//         console.log('-----', nums[i]);
//         if(nums[i] !== 0) {
//             console.log('-----', nums[i], '++++', nums[j]);
//             [nums[i], nums[j]] = [nums[j], nums[i]];
//             j++;
//         }
//         console.log('++++', nums[i]);
//         i++;
//     }
//     return nums;
// }


// 反串字符串
// const reverseStr = function(s) {
//     let l = 0;
//     let r = s.length - 1;
//     while(l < r) {
//         [s[l], s[r]] = [s[r], s[l]];
//         l++;
//         r--;
//     }
//     return s;
// }


// 两个数组的交集
// const intersect = function(nums1, nums2) {
//     nums1.sort((a, b) => a - b);
//     nums2.sort((a, b) => a - b);
//     let l1 = 0;
//     let l2 = 0;
//     const nums1Len = nums1.length;
//     const nums2Len = nums2.length;
//     const resArr = [];
//     while(l1 < nums1Len && l2 < nums2Len) {
//         if(nums1[l1] === nums2[l2]) {
//             resArr.push(nums1[l1]);
//             l1++;
//             l2++;
//         }
//         if(nums1[l1] > nums2[l2]) {
//             l2++;
//         }
//         if(nums1[l1] < nums2[l2]) {
//             l1++;
//         }
//     }
//     return resArr;
// }



// const nums1 = [1,2,2,1], nums2 = [2,2];
// const res = intersect(nums1, nums2);
// console.log(res);
console 命令行工具 X clear

                    
>
console