kindring 2 роки тому
батько
коміт
44749795bc
3 змінених файлів з 156 додано та 0 видалено
  1. 0 0
      算法/1. 两数之和.md
  2. 64 0
      算法/1.两数只和.js
  3. 92 0
      算法/2. 两数相加.js

+ 0 - 0
算法/1. 两数之和.md


+ 64 - 0
算法/1.两数只和.js

@@ -0,0 +1,64 @@
+/*
+ * @Description: 
+ * @Autor: kindring
+ * @Date: 2022-05-17 09:55:38
+ * @LastEditors: kindring
+ * @LastEditTime: 2022-05-17 10:47:27
+ * @LastDescript: 
+ */
+// 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
+
+// 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
+
+// 你可以按任意顺序返回答案。
+
+// 来源:力扣(LeetCode)
+// 链接:https://leetcode.cn/problems/two-sum
+// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
+// let nums = [2, 7, 11, 15],
+//     target = 9;
+
+
+/**
+ * 两数之和,时间优先,可优化
+ * @param {*} _nums 
+ * @param {*} _target 
+ * @returns 
+ */
+function answer1(_nums, _target) {
+    let map = new Map();
+    for (let i = 0; i < _nums.length; i += 2) {
+        if ((_nums[i] + _nums[i + 1]) == _target) {
+            return [i, i + 1]
+        } else if ((_nums[i] + _nums[i - 1]) == _target) {
+            return [i, i - 1]
+        } else {
+            if (map.has(_target - _nums[i - 1])) {
+                console.log('1');
+                if (map.get(_target - _nums[i - 1]) != i - 1) {
+                    return [map.get(_target - _nums[i - 1]), i - 1]
+                }
+            } else if (map.has(_target - _nums[i])) {
+                return [map.get(_target - _nums[i]), i];
+            } else if (map.has(_target - _nums[i + 1])) {
+                return [map.get(_target - _nums[i + 1]), i + 1];
+            }
+        }
+        map.set(map.set(_nums[i - 1], i - 1));
+        map.set(map.set(_nums[i], i));
+        map.set(map.set(_nums[i + 1], i + 1));
+    }
+}
+
+// 空间优先
+function answer2(_nums,_target){
+    let i = 0;
+    while (true) {
+        _target - _nums[i];
+        i++;
+    }
+}
+
+console.log(answer1([3, 2, 4], 6));
+console.log(answer1([2, 7, 11, 15], 9));;
+console.log(answer1([-1, -2, -3, -4, -5], -8));; //[2,4]]

+ 92 - 0
算法/2. 两数相加.js

@@ -0,0 +1,92 @@
+/*
+ * @Description: 
+ * @Autor: kindring
+ * @Date: 2022-05-17 14:04:16
+ * @LastEditors: kindring
+ * @LastEditTime: 2022-05-17 16:09:40
+ * @LastDescript: 
+ */
+/**
+ * Definition for singly-linked list.
+ * function ListNode(val, next) {
+ *     this.val = (val===undefined ? 0 : val)
+ *     this.next = (next===undefined ? null : next)
+ * }
+ */
+
+function ListNode(val, next) {
+    this.val = (val === undefined ? 0 : val)
+    this.next = (next === undefined ? null : next)
+}
+
+let l = ATL([1, 2, 3]);
+// console.log(l);
+/**
+ * 数组转链表,递归版本
+ */
+function ATL(arr, i = 1, _l) {
+    if (i > arr.length) {
+        return null;
+    }
+    if (!_l) {
+        _l = new ListNode(arr[0])
+    }
+    _l.next = ATL(arr, i + 1, new ListNode(arr[i]))
+    return _l
+}
+
+/**
+ * @param {ListNode} l1
+ * @param {ListNode} l2
+ * @return {ListNode}
+ */
+var addTwoNumbers = function(l1, l2) {
+    let prevValue = 0;
+    // 总返回用的表
+    let r = new ListNode()
+    let t = r;
+    let arr = []
+        // 以l1 为基准.将l1中的所有值进行添加
+    while (l1 || l2) {
+        // console.log(l1);
+        let v1 = l1 ? l1.val : 0,
+            v2 = l2 ? l2.val : 0;
+        let v = (v1 + v2 + prevValue) % 10;
+        prevValue = ~~((v1 + v2 + prevValue) / 10);
+        arr.push(v);
+        l1 = l1 ? l1.next : null;
+        l2 = l2 ? l2.next : null;
+        if (!t) {
+            t = new ListNode();
+            r.val = v;
+            r.next = t;
+        } else {
+            t.val = v;
+            if (!l1 && !l2) {
+                if (prevValue) {
+                    t.next = new ListNode(prevValue);
+                }
+                return r;
+            }
+            t.next = new ListNode()
+            t = t.next
+        }
+    }
+    return r;
+};
+let _1 = ATL([1, 2]);
+let x = addTwoNumbers(_1, ATL([2, 3, 4]))
+console.log(x);
+console.log(x.next);
+console.log(x.next.next);
+let n1 = ATL([9, 9, 9, 9, 9, 9, 9])
+let n2 = ATL([9, 9, 9, 9])
+let x2 = addTwoNumbers(n1, n2)
+console.log(x2.next.val);
+console.log(x2.next.next.val);
+console.log(x2.next.next.next.val);
+console.log(x2.next.next.next.next.val);
+console.log(x2.next.next.next.next.val);
+console.log(x2.next.next.next.next.next.next.val);
+console.log(x2.next.next.next.next.next.next.next.val);
+console.log(x2.next.next.next.next.next.next.next.next.val);