1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
用双层for循环暴力解决,有手就行。
Map是C++中STL的一个关联容器,key和value一对一对应。
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { map<int,int> a;//建立hash表存放数组元素 vector<int> b(2,-1);//创建一个容积为2,值为-1的容器 for(int i=0;i<nums.size();i++) a.insert(map<int,int>::value_type(nums[i],i)); //a.insert(pair<int, int>(num[i], i));map的第二种插入方式 for(int i=0;i<nums.size();i++) { if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i)) //判断是否找到目标元素且目标元素不能是本身 { b[0]=i; b[1]=a[target-nums[i]];//返回a的下表 break; } } return b; }; };
map的基本操作函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
2.两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode pre(0),*p=⪯ int a=0; while(l1||l2||a) { if(l1) a+=l1->val,l1=l1->next; if(l2) a+=l2->val,l2=l2->next; p->next=new ListNode(a%10); p=p->next; a=a/10; } return pre.next; } };
在选择链表的输出时,可以选择创建一个新链表,而不是在原链表上修改,这样当输出链表由于进位,长度为两个链表之和加一的情况就不需要去特殊处理。
浙公网安备 33010602011771号