自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 证明题8.3

习题8.3:吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值——如果该赋值存在。证明吝啬SAT是NP-完全问题。证明:我们考虑将SAT规约至吝啬SAT:对于任意一个SAT问题,设其有n个变量,则该SAT问题的满足赋值中最多有n个变量赋值为true,这相当于一个输入为(S,n)的吝

2017-07-01 10:27:12 202

原创 【LeetCode题解】523. Continuous Subarray Sum

题意为判断一个数组中是否存在子串,使得子串和为k的倍数解题思路是:对数组进行遍历,计算前i项和并且记录第一次出现模k余m的位置dp[m],若dp中已经存在键为m的值,则比较i和dp[m],若相差大于1则说明存在这样的子串。代码如下:class Solution(object): def checkSubarraySum(self, nums, k): """

2017-05-19 17:22:22 259

原创 【LeetCode题解】309. Best Time to Buy and Sell Stock with Cooldown

此题在之前121题的基础上做了细微调整,首先可以有多次买入或卖出的事件发生,且在卖出股票的下一天不能进行股票交易活动解题思路:需要创建两个辅助数组sell和buy,sell[i]第i天不持有股票的最大利润,buy[i]表示第i天持有股票的最大利润。一天的交易状态就是否持有股票来说,只包含持有状态和不持有状态两种1、对于持有状态,今日可能没有进行买入操作所以跟昨天持股状态一样;也可能

2017-05-19 15:46:53 289

原创 【LeetCode题解】121. Best Time to Buy and Sell Stock

题意简述为,有一个数组prices存放每天股票的交易价格,并且规定在一天里只能进行买或卖一项事务解题思路为:(1)设立变量curMin记录交易价格的最低值。设立变量maxP记录最大收益值(2)对数组进行遍历,在位置i,比较prices[i]和curMin进行对curMin值的更新,比较maxP和prices[i] - curMin的最大值对maxP进行更新代码如下:class

2017-05-19 14:20:06 211

原创 【LeetCode题解】198. House Robber

将题意精简地叙述,即为抢劫犯在一排房子中抢劫,房子i中的钱的总量为nums[i],且相邻的房子不能同时抢劫。问最终最多能抢到多少钱?该问题可以用DP思想进行解决,开辟数组ret,ret[i]表示抢到第i栋房子时可以抢到钱的最大数,可得到状态方程:ret[i] = max{ret[i-1], ret[i-2]+nums[i]}针对ret[0]和ret[1]需要单独拿出来进行计算,代码如下

2017-05-19 13:34:14 198

原创 【Leetcode题解】53. Maximum Subarray

题意为找出数组的连续字数组中各个元素和的最大值。此题可以用DP的思想进行解决,令curSum[i]为从第i项起子串的最大和,则有可得到递推关系:sum[i] = max{A[i], A[i] + sum[i+1]}代码如下:class Solution {public: int maxSubArray(vector& nums) { int length =

2017-05-19 11:48:36 178

原创 [LeetCode题解]55.Jump Game

Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determine i

2017-04-12 20:37:10 207

原创 [LeetCode题解]455. Assign Cookies

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a greed factor gi, which is the minimum size of a

2017-04-12 20:30:02 241

原创 【LeetCode题解】109.Convert Sorted List to Binary Search Tree

题意为将一个排序好的单向链表转换为一棵平衡二叉树此题需要用到递归的思想:若给定一个有序链表,转换为平衡二叉树,则中间的结点为root,中间结点左侧结点位于root的左子树部分,中间结点右侧结点位于root的右子树部分,运用递归的思想不断迭代即可,注意每次迭代均应注明本次迭代的第一个结点和最后一个结点,下面给出代码: TreeNode* sortedListToBST(ListNo

2017-03-27 20:26:57 239

原创 【LeetCode题解】328.Odd Even Linked List

本题为将一个现有的单向链表调整顺序,使得先是奇数项结点后是偶数项结点此处需要注意的是,奇偶指的是结点序号,而不是结点的值首先初始化odd结点为head,even结点为head->next,evenHead记录第一个偶结点的位置ListNode *odd = head;ListNode *even = head->next;ListNode *evenHead = even;然

2017-03-27 20:23:15 334

原创 【LeetCode题解】382.Linked List Random Node

本题为给定一个单向链表,返回其中任意一个结点val的值比较直观的一种做法是,先确定链表的长度n,然后随机一个[0,n)之间的整数randomN,用循环迭代randomN次即可但是题干中提示链表的长度可能特别的大,所以很难确定链表的长度,进而上述方法不能使用这道题的解决需要用到概率论的知识。即蓄水池抽样思想,当random(0,n) = 0时,用第n+1个值做返回值,下面给出证明

2017-03-27 19:29:45 213

原创 【LeetCode题解】386. Lexicographical Numbers

本题意味将1到n所有的int类型数进行字典序排序首先想到的是运用分治算法的思想,设采用solve的方法解决问题对于整数m,若在某一时刻将其插入最终返回的res数组,思考下一步应该插入什么,分两种情况:(1)若 m*10 (2)若 m (此处取模10小于9的情况,是因为当余数为9时,+1后得到的情况已经在条件(1)中考虑到了,加入会产生重复)下面给出解题代码:class So

2017-03-15 16:47:16 252

原创 【LeetCode题解】203.Remove Linked List Elements

题意为删掉一个链表中特定值的节点,整体算法思想比较简单,但是应该注意一些小的细节大体思想:创建一个pre节点,将其next指针指向head;创建cur指针,将其指向head

2017-03-15 11:15:42 180

原创 【LeetCode题解】56. Merge Intervals

题意为给定一系列间隔集合,将重叠部分合并首先判断传入的vector是否为空,若为空则返回它本身然后根据题目给出的struct定义,可以先将这些间隔根据start的大小进行排序,这一步的实验需要用到stl中的sort函数,并且写出compare函数:static bool compare(Interval a, Interval b){ if(a.start == b.start

2017-03-06 19:31:51 232

原创 【LeetCode题解】21.Merge Two Sorted Lists

题意为将两个已经排好序的链表合并为一个新的有序链表 可以用递归和非递归两种方法解决问题:(1)非递归首先需要创建一个新的链表,然后依次遍历两个链表,并将两个数组中较小的元素依次插入新链表中。 值得注意的是,若一个链表为空或已经遍历完全,则将另一个链表插入即可class Solution {public: ListNode* mergeTwoLists(ListNode* l1, Lis

2017-03-06 17:14:10 227

原创 【LeetCode题解】21.Merge Two Sorted Lists

题意为将两个已经排好序的链表合并为一个新的有序链表可以用递归和非递归两种方法解决问题:(1)非递归首先需要创建一个新的链表,然后依次遍历两个链表,并将两个数组中较小的元素依次插入新链表中。值得注意的是,若一个链表为空或已经遍历完全,则将另一个链表插入即可class Solution {public: ListNode* mergeTwoLists(ListNode*

2017-03-06 17:03:17 309

原创 【LeetCode题解】88. Merge Sorted Array

题意为给定两个排好序的数组num1和num2,使用归并排序的思想将这两个数组合为一个有序数组题目中给出的提示信息,num1的size大于或等于m + n,十分有用,可以将num2中的元素归并到num1中可以从后面开始考虑,即先考虑2个数组中最大的值,并放在下标m+n-1位处,然后向前以此类推注意,需要两个变量index_1和index_2来记录下一步待比较的num1和num2数组元素的

2017-03-06 14:36:24 280

原创 【Leetcode题解】258.Add Digits

题意为:将一个非负整数各位相加,若和不为一位数,则继续各位相加直至得到一个个位数,且求出该数为多少设 n = 10000a + 1000b + 100才+ 10d + c可化为:n = a + b + c + d + e + (9999a + 999b + 99c + 9d)可以看出,n和 a+b+c+d+e(即n的各个位数之和)模9同余所以只要对n不断地进行模9的操作,最终会得到

2017-03-02 20:16:38 211

原创 【Leetcode题解】136.Single Number

题目意思为找出数组中唯一一个出现1次的元素,且该数组中其他元素均出现2次。此处需要运用异或的性质,巧妙地进行解题:异或性质:a ^ 0 = aa ^ a = 0a ^ b ^ c = a ^ c ^ b所以可以推出:a ^ b ^ a = a ^ a ^ b = 0 ^ b = b所以对数组中所有的元素进行异或处理,出现偶数次的元素会被消去,结合题意,可知最后得到的结果

2017-03-02 19:49:51 196

原创 【LeetCode题解】338.Counting Bits

这题题意为:根据用户输入的整形数字num,来判断在[0,num]范围内所有的数的二进制表示中“1”的个数根据题目要求,希望时间和空间复杂度都控制在O(n),所以不能采用直观的循环嵌套方法可以在前几步得到的结果的基础上得到新的结果,采用位运算操作的思想,我想出了两种解决方案:(1)看末位比如说数字1的二进制表示为“1”,含有1个“1”,即ret[1] = 1;数字3的二进制表示为

2017-02-27 15:53:56 182

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除