1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。 但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 思路:循环数组的时候,用和target减去当前循环的数算出另一个数,找出数组里是否存在这另一个数
var twoSum = function(nums, target) {
// 第一种用数组方法查找另一个数
for(let i = 0; i < nums.length; i++) {
let other = target - nums[i];
let index = nums.lastIndexOf(other);
// 注意考虑查找到当前循环数的情况,导致一样
if(index!=-1 && index != i) {
return [i,index]
}
}
// 第二种方法用 Map 存储已经循环过的数,在 Map 里查找是否存在另一个数
// 这种情况不用考虑下标一样的情况,因为是在已经循环过的数里面查找另一个数
// let map = new Map();
// for(let i = 0; i < nums.length; i++){
// let other = target - nums[i];
// if(map.has(other)){
// return [map.get(other),i]
// }else {
// map.set(nums[i],i)
// }
// }
};
2.合并升序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
思路:迭代法:新建一个链表,比较两个链表的头部节点大小,小的加到新链表上。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
let list = new ListNode();
// 记一下新链表的头指针
let pre = list;
while(l1!=null && l2!=null){
if(l1.val <= l2.val){
list.next = l1;
l1 = l1.next;
}else {
list.next = l2;
l2 = l2.next;
}
list = list.next;
}
// 肯定有一个没有循环完
list.next = (l1 == null) ? l2 : l1;
return pre.next;
};