摘要: 一:解题思路 第一种方法:新申请一个和原始数组一样大的新数组。先把要反转的数字拷贝到新数组中,然后把剩余的数字也拷贝到新数组中。最后把这个新数组全部拷贝到原始数组中来。Time:O(n),Space:O(n) 第二种方法:首先将整个数组反转,然后将旋转部分反转,最后将剩余部分反转。Time:O(n) 阅读全文
posted @ 2020-03-17 22:01 repinkply 阅读(202) 评论(0) 推荐(0)
摘要: 一:解题思路 方法一:先计算出链表的长度,然后用一个指针指向链表的首结点,让这个指针走链表一般的长度,最后就落在链表的中间位置。 方法二:快慢指针法,先让快指针和慢指针都分别指向链表首节点,快指针每次走两步,慢指针每次走一步,当快指针指向为空时,此时慢指针就指向中间节点。 二:完整代码示例 (C++ 阅读全文
posted @ 2020-03-17 21:02 repinkply 阅读(134) 评论(0) 推荐(0)
摘要: 一:解题思路 这道题目是反转字符串的变形题目。我们只需要将每个单词作为一个单独的字符串进行反转即可。 二:完整代码示例 (C++版和Java版) C++: Time:O(n),Space:O(1),因为C++语言能够直接修改源字符串,所以不需要申请一个额外的数组空间出来。 class Solutio 阅读全文
posted @ 2020-03-17 20:37 repinkply 阅读(130) 评论(0) 推荐(0)
摘要: 一:解题思路 Time:O(n),Space:O(n) 二:完整代码示例 (C++版和Java版) C++: class Solution { public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if (t1 == NULL && t 阅读全文
posted @ 2020-03-17 17:56 repinkply 阅读(154) 评论(0) 推荐(0)
摘要: 一:解题思路 Time:O(n),Space:O(1) 二:完整代码示例 (C++版和Java版) C++: class Solution { public: void reverseString(vector<char>& s) { int i = 0, j = s.size() - 1; for 阅读全文
posted @ 2020-03-17 17:42 repinkply 阅读(116) 评论(0) 推荐(0)
摘要: 一:解题思路 方法一:Time:O(n),Space:O(n) 方法二:Time:O(n),Space:O(1) 二:完整代码示例 (C、C++、Java、Python) 方法一C: void moveZeroes(int* nums, int numsSize) { if (numsSize == 阅读全文
posted @ 2020-03-17 16:50 repinkply 阅读(160) 评论(0) 推荐(0)
摘要: 一:解题思路 这是一道动态规划题 方法一:状态d(i)表示爬到第i阶楼梯时的最小代价,d(i)=min(d(i-1),d(i-2))+c(i),初始条件,d(0)=c(0),d(1)=c(1)。最后爬到第n阶楼梯的时候,是可以由倒数第一阶楼梯爬上去的,也可以从倒数第二阶楼梯爬上去的。故最后要返回的是 阅读全文
posted @ 2020-03-17 15:50 repinkply 阅读(155) 评论(0) 推荐(0)
摘要: 一:解题思路 Time:O(n),Space:O(1) 二:完整代码示例 (C++版和Java版) C++: class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if((head==NULL)||(head->n 阅读全文
posted @ 2020-03-17 14:40 repinkply 阅读(111) 评论(0) 推荐(0)
摘要: 一:解题思路 这道题是一道动态规划题。动态规划核心在于定义状态和状态转移方程。那么怎样定义呢? 定义d(i)抢劫有i个房子的最大金额。那么d(i)=max(d(i-1),d(i-2)+nums[i]),d(0)=nums[0],d(1)=max(nums[0],nums[1]) 第一种方法:需要一个 阅读全文
posted @ 2020-03-17 14:15 repinkply 阅读(100) 评论(0) 推荐(0)