自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法期末项目--Capacitated Facility Location Problem

题目 Suppose there are n facilities and m customers. We wish to choose: (1) which of the n facilities to open (2) the assignment of customers to facilities The objective is to minimize the sum of the op...

2018-12-30 18:21:18 255

原创 Leetcode解题笔记 之(16)--3Sum Closest [Medium]

解题思路 题目是给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 我们只需要排序,然后把三个数求和的解就转化为两个数相加等于某个数。 求解两个数相加等于某个数,用双指针法即可。不需要处理重复问题,还降低了难度。 代码 public int threeSu...

2018-12-30 20:44:29 110

原创 Leetcode解题笔记 之(12)-- Integer to Roman [Medium]

解题思路 题意很简单,最基本的有1,5,10,50,100,500,1000.其他的需要特殊处理的有4,9,49,90,400,900. 所以建立映射关系{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1},依次从大到小检查即可. 代码 public String intToRoman(int num) { if (num ...

2018-12-30 20:39:44 100

原创 Leetcode解题笔记 之(63)-- Unique Paths II [Medium] 动态规划

解题思路 添加一步,当是障碍时,取0,其余同上一题的解题思路。 代码 int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int row = obstacleGrid.size(); int col = obstacleGrid[0].size()...

2018-12-30 18:41:19 113

原创 Leetcode解题笔记之(62)-- Unique Paths [Medium] 动态规划

解题思路 设v[i][j] 为到达第i,j格的独立路径数,则v[i][j] = v[i][j - 1] + v[i - 1][j],原因是只会有从上面一格往下走或者从右面一格往左走两种情况 代码 int uniquePaths(int m, int n) { vector<vector<int>> v(m + 1); for (int i...

2018-12-30 18:36:00 146

原创 Leetcode解题笔记之(64)--Minimum Path Sum [Medium]

解题思路 利用动态规划的方法,首先研究子问题得出: 设v[i][j] 为到达 grid[i][j] 最短路径,则 v[i][j] = min{v[i][j - 1], v[i - 1][j]} + grid[i][j], 这样我们只要把第一行第一列初始化再执行算法就可以了。 代码 int minPathSum(vector<vector<int>>& gri...

2018-12-02 15:13:11 204

原创 Leetcode解题笔记之(51)-- N-Queens [Hard]

解题思路 N皇后问题就是是NP完全类问题的一个典型实例,它没有多项式时间算法解。 在设计算法求解的时候,我们应该尽量考虑减少搜索次数和判断次数,尽量减少循环和递归的次数,从而降低求解耗时。 注意:将棋盘上不能放的点去除。因为是按照每行每行去放皇后,所以只需要判断西北方和东北方以及上方有无皇后即可,下方由于row 值更大,不存在皇后,无须判断。递归执行后记得将点复原。 代码 void sol...

2018-12-02 15:06:58 277

原创 Leetcode解题笔记之(53)--Maximum Subarray [Easy]

解题思路 如果用简单的解法,那只需要遍历两次,时间复杂度取O(N^2)即可,但如果想将时间复杂度降低到线性,那需要用到动态规划的方法。 设preSub[i]为在index i前(包括字符i)的连续子串最大和,则preSub[i] = max{preSub[i - 1] + nums[i],nums[i]}, preSub[nums.size() - 1] 即为所求。 代码 const in...

2018-12-02 14:57:38 76

原创 Leetcode解题笔记之(9)-- Palindrome Number [Easy]

解题思路 这道题是让我们判断一个整数是不是回文,很简单暴力解决就ok了,先判断整数是不是正整数,再判断是不是一个Palindrome Number。 代码 bool isPalindrome(int x) { if (x < 0 || (x!= 0 && x % 10 == 0)) return false; int sum = 0; ...

2018-12-02 14:45:40 80

原创 Leetcode解题笔记之(七)-- Reverse Integer [Easy]

解题思路 给定一个10进制整数,翻转它。这是一道简单题,简单利用取余和整除就可以解决。 代码 int reverse(int x) { int result = 0; bool check = x >= 0 ? 1 : 0; int maxInt = 2147483647 / 10; int minInt = -21474836...

2018-11-18 00:15:21 87

原创 Leetcode解题笔记之(六)-- ZigZag Conversion [Medium]

解题思路 就是给定字符串,按某种特定方式排列一下。这道好像没有涉及什么算法,只是纯粹的输入输出。有些人可能不知道ZigZag到底是个什么形状,简单来说。对于字符串0123456789来说,当row = 3时的ZigZag它应该这样排列: 所以我们输出字符串0481357926. 代码 string convert(string s, int numRows) { int n =...

2018-11-18 00:03:41 99

原创 Leetcode解题笔记之(五)--Longest Palindromic Substring [Medium]

解题思路 题目要求我们寻找长度最长的回文子字符串,这个问题其实很简单但是解法有不同。 首先,我们可以采用暴力解决。直接比较出最长的那个,以每一个字符为中心,像两边扩散来寻找回文串,这个算法的时间复杂度是O(n*n)。 另外一个经典的解法就是动态规划解法,这是动态规划的经典案例。构建子问题: 设d[i][j]表示字符串s从第i个字符到第j个字符为回文(字符串从0开始),则 若d[i+1][j-1] ...

2018-11-17 23:07:59 89

原创 Leetcode解题笔记之(四)-- Median of Two Sorted Arrays [Hard]

解题思路 给定俩有序数组,找出把它俩合并后所得数组的中位数。要求时间复杂度为O(log(m+n))。 这道题要求我们在对数时间内搞定,我一开始的想法是暴力归并,所以应该是不符合题意的。 因此,我们需要把两个数组各自二分。 中位数是将数组分成数量相等的两半的数(这里会受到奇偶的影响),也就是说对于合并以后长度为N的数组,我们只需要找到它的第(N+1)/2个数或者第(N+1)/2与第N/2个数的均值。...

2018-11-05 00:53:42 100

原创 Leetcode解题笔记之(三)——Longest Substring Without Repeating Characters[Medium]

解题思路 这道题很中规中矩,题目是给定一个字符串,查找在没有重复字符的情况下最长的子串的长度。 用一个数组实时统计每个字母的出现次数,边走边数就行了。 代码 int lengthOfLongestSubstring(string s) { static const int DICT_SIZE = 256; int ls = s.size(); ...

2018-10-29 01:10:20 120

原创 Leetcode解题笔记之(二)——Add Two Numbers [Medium]

解题思路 这道题就是将两个数用链表表示然后将这两个数相加,方法很简单粗暴,直接加就可以了。但是这里有一点要注意,就是这两个数的位数可能不一样,即这两个链表的长度可能不一样,所以我们需要做好创建新节点的准备。 代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* iter1 = l1; ListNode*...

2018-10-24 00:22:44 155

原创 Leetcode解题笔记之(一)——Two Sum(easy)

Leetcode解题笔记之(一)——Two Sum(easy) 题目描述 找到能构成目标整形数的两个数字在vector里的位置,设定是必然能找到可匹配的两个数。所以我们只需要用哈希表不断记录每个元素对应的下标,然后查找target - a[i]就行了。 解题思路 这是一道比较简单的题,我们只需要判断每个数与目标值的差是否在我们的vector里面就可以了。 #include<iostream...

2018-10-14 23:00:26 127

空空如也

空空如也

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

TA关注的人

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