第一次发表文章,就发表两到简单点的题目好了~~~
第一道题目是这样的:现在有一个整数的数组,然后给定一个目标数,我们要做的是找出数组中唯一存在的两个不同的数,其相加能够得到这个目标数,然后返回这两个数的下标比如:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].这是一道很容易的题,将数组中的任意两个数相加的和穷举一下,依次比较即可,复杂度为O(n2)。具体代码如下:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {
vector<int> v;
int i=0;
int n=nums.size();
bool b=false;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(nums[i]+nums[j]==target){
v.push_back(i);
v.push_back(j);
b=true;
break;
}
}
if(b)break;
}
return v;
}
};
第二道题目也是比较简单的,题目是这样的:有两个非负数,每个数的每个数字都以逆序的方式存放在一个链表中,求这两个数的和,结果仍然存放在链表中,最后结果返回链表的头指针,例子如下:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
这道题目也是比较简单的,就是两个数求和,从低位到高位一位位地加,低位有进位就加到高位上,复杂度为O(n),具体代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l=new ListNode(0);
ListNode* temp=l;
int carry=0;
while(l1!=NULL||l2!=NULL||carry!=0){
if(l1!=NULL){
carry+=l1->val;
l1=l1->next;
}
if(l2!=NULL){
carry+=l2->val;
l2=l2->next;
}
temp->next=new ListNode(carry%10);
carry=carry/10;
temp=temp->next;
}
return l->next;
}
};
本文解析了两道经典算法题目:寻找数组中两数之和等于目标值的下标及两个逆序链表数值相加的问题。通过示例详细介绍了实现思路与代码实现。

178

被折叠的 条评论
为什么被折叠?



