算法
文章平均质量分 51
xjc864588399
这个作者很懒,什么都没留下…
展开
-
LeetCode 64. Minimum Path Sum
最大值最小值问题,dp矩阵型问题,保存每一步的状态, 首先初始化第一行和第一列,然后填充中间的值,dp[i][j] = grid[i][j]+min(dp[i-1][j],dp[i][j-1])class Solution {public: int minPathSum(vector>& grid) { int col = grid[0].size();原创 2017-10-02 12:07:40 · 300 阅读 · 0 评论 -
LeetCode 206. Reverse Linked List
解题思路: 使用两个指针,分别指向head 和 head->next,或者直接递归.class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* p1 = NULL; ListNode* p2 = NULL; while(head){原创 2017-02-02 16:06:10 · 169 阅读 · 0 评论 -
LeetCode 486. Predict the Winner
解题思路:DFSclass Solution { int maxScore(vector& nums, int start, int end, vector> &m) { if(start>end) return 0; if(start==end) return nums[start]; if(m[start][end]) return原创 2017-01-29 14:13:06 · 924 阅读 · 0 评论 -
LeetCode 409. Longest Palindrome
解题思路: 一次AC,统计字符串中每个字符出现的次数,偶数个就直接累加,奇数个减一再求和,最后返回值需要注意,含有奇数的字符时,返回结果为count+1,若只有偶数的字符,直接返回count.class Solution {public: int longestPalindrome(string s) { mapres; for(int i = 0;原创 2017-01-29 10:49:37 · 377 阅读 · 0 评论 -
LeetCode
解题思路: 使用异或运算class Solution {public: int missingNumber(vector& nums) { int res = nums.size(); for(int i = 0; i < nums.size(); i++){ res ^= i; res ^= nums[原创 2017-01-28 21:36:41 · 184 阅读 · 0 评论 -
LeetCode 171. Excel Sheet Column Number
解题思路: 找出来规律就行了.class Solution {public: int titleToNumber(string s) { int res = 0; for(int i = 0; i < s.length(); i++){ res = res * 26 + int(s[i] - 'A' + 1);原创 2017-01-28 19:46:16 · 241 阅读 · 0 评论 -
LeetCode 326. Power of Three
解题思路:第一种想到的是打表,直接把整数范围内的是3的立方的数打出来,比较trick 哈.这是一个纯粹的数学问题,看讨论区,有许多关于取对数的方法,log() 和log10(),其中log是以自然对数e为底的,这两个方式对于243来说,结果是不相同的,原因是以e为底的数产生了误差,因为3和e相差远比3和10相差的小,导致换底之后的结果有误差.class Solution {public:原创 2017-01-27 12:15:22 · 306 阅读 · 0 评论 -
LeetCode
解题思路:统计出现的字符是否都相同且次数相同,使用map容器,运行时间16msclass Solution {public: bool isAnagram(string s, string t) { if(s == t) return true; if(s.length() != t.length()) return false; ma原创 2017-01-25 09:44:02 · 209 阅读 · 0 评论 -
LeetCode 237. Delete Node in a Linked List
解题思路:假删除,因为不能访问到节点的前一个指针,所以只能用后一个的去覆盖前一个.class Solution {public: void deleteNode(ListNode* node) { *node = *node->next; }};原创 2017-01-25 09:20:08 · 169 阅读 · 0 评论 -
LeetCode 100. Same Tree
解题思路:树的递归class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL || q == NULL) return p == q; else return p->val == q->val && i原创 2017-01-25 09:10:36 · 158 阅读 · 0 评论 -
LeetCode 35. Search Insert Position
解题思路: 二分法class Solution {public: int searchInsert(vector& nums, int target) { int index1 = 0; int index2 = nums.size(); int mid = 0; while(index1 < index2){原创 2017-02-02 22:27:16 · 217 阅读 · 0 评论 -
LeetCode 88. Merge Sorted Array
解题思路: 比较两个数组的每个数的大小,从后往前比较,大的保存在nums1的最后,遍历.class Solution {public: void merge(vector& nums1, int m, vector& nums2, int n) { while(m>0 && n>0){ if(nums2[n-1]>nums1[m-1]){原创 2017-02-03 20:36:05 · 339 阅读 · 0 评论 -
LeetCode 58. Length of Last Word
解题思路:使用 istringstreamclass Solution {public: int lengthOfLastWord(string s) { istringstream ss(s); string result; while(ss>>result){ } return result.leng原创 2017-02-03 21:08:51 · 347 阅读 · 0 评论 -
LeetCode 494. Target Sum
使用递归方法class Solution {public: int findTargetSumWays(vector& nums, int S) { int res=0; find(nums,S,0,res); return res; } void find(vector& nums, int S, int start,原创 2017-10-02 10:58:41 · 385 阅读 · 0 评论 -
编程珠玑之快速排序
我们将需要划分的目标区间定位[l, u]。首先给定目标值t = x[l]。我们需要重新组织x[l...u],使得所有小于t的元素都在m的一端,所有大于t的元素在m的另一端。初始时m = l,我们将i从l+1一直遍历到u,代码在检测第i个元素时必须考虑两种情况。如果x[i]>=t,那么一切正常,不变式为真;如果x[i]void q_sort_ori(int *a, int low, in原创 2017-09-07 15:15:08 · 371 阅读 · 0 评论 -
编程珠玑之二分搜索
问题:使用二分搜索返回找到元素的位置,找到第一次出现的位置,找到最后一次出现的位置,分别使用循环和递归编写代码原始的二分搜索int bs(int *a, int low, int high, int target){ while(low < high){ if(a[low] == target) return low; int mid = (low+high)/2; if原创 2017-09-06 14:37:39 · 248 阅读 · 0 评论 -
ImageNet2017 周记之第四周
距离截止日期还剩下一周,baseline还没有,但是已经找到问题所在。我把之前的VOC的prototxt换成coco的,然后使用class-aware的方式,训练。这样原先bbox输出的8个点,就变成了现在的804点,rfcn的8*7*7变为804*7*7,计算量无疑变大,训练速度自然也就变慢。由之前的1s2.5轮,变为现在1s1 轮。而batch是1,两块卡是2,也就是1s能够过两张图片,两个半原创 2017-07-05 11:38:54 · 467 阅读 · 0 评论 -
ImageNet2017 周记之第三周
因为使用RFCN直接训练ImageNet的baselinemAP只有24%左右,太低,打乱自己的计划,之前那种网络结构都没有机会去在ImageNet上使用,先找这个问题。花了一周时间,从重新写imagenet.py,处理ImageNet的数据,到训练完,得到结果,花了四天,还是这么高。说明之前训练RFCN的ImageNet数据处理是没有问题的,但是为何如此低,难道是因为ImageNet的目标检测比原创 2017-07-05 11:38:04 · 760 阅读 · 0 评论 -
ImageNet2017 周记之第二周
因为跑一次ImageNet需要2天多的时间,所以一开始是在VOC上做修改网络结构的实验。在网络结构上主要尝试了以下实验:第一种,就是直接使用RFCN+ Resnet101 结构跑VOC,什么改动都没有,结果作为baseline。第二种,在RFCN的ps-roipooling层,加入pad_ratio,之所以要加pad_ratio,相当于起到增大了proposal对应原图的尺寸,比如pad_原创 2017-07-05 11:37:12 · 619 阅读 · 0 评论 -
LeetCode 321. Create Maximum Number
由于k的大小不定,所以有三种可能,第一种是当k为0时,两个数组中都不取数;第二种是当k不大于其中一个数组的长度时,有可能只从一个数组中取数;第三种情况是k大于其中一个数组的长度,则需要从两个数组中分别取数,至于每个数组中取几个,每种情况都要考虑到,然后每次更结果即可。对于分别从两个数组中取数字的情况,我们需要将两个取出的小数组混合排序成一个数组,小数组中各自的数字之间的相对顺序不变。我们还需要一个原创 2017-03-18 17:20:50 · 399 阅读 · 0 评论 -
LeetCode 204. Count Primes
解题思路:维基百科中 https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes Input: an integer n > 1. Let A be an array of Boolean values, indexed by integers 2 to n, initially all set to true. for i =原创 2017-02-03 22:05:24 · 251 阅读 · 0 评论 -
LeetCode 69. Sqrt(x)
解题思路: 牛顿迭代法, https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division点击打开链接class Solution {public: int mySqrt(int x) { long long r = x; while (r*r > x)原创 2017-02-03 21:34:04 · 343 阅读 · 0 评论 -
LeetCode 20. Valid Parentheses
解题思路: 首先想到栈的操作,先入后出,用一个vector容器来模拟栈的操作.class Solution {public: bool isValid(string s) { vector res; map m{ {']','['},{')','('},{'}','{'} }; for(int i = 0; i < s.原创 2017-01-25 00:59:34 · 141 阅读 · 0 评论 -
LeetCode 290. Word Patter
解题思路:先将字符串使用string流的形式分成一个个字符串,之后,将pattern和str 分别存到一个map容器中,并比较出现的次数是否相等.class Solution {public: bool wordPattern(string pattern, string str) { stringstream ss(str); string原创 2017-01-24 23:28:18 · 194 阅读 · 0 评论 -
LeetCode 451. Sort Characters By Frequency
解题思路:使用map 将string里面的每个字符insert进去,之后需要对map的value进行一个降序,考虑到无法直接对map的值进行降序排列,所以把map 放到vector容器中,这样可以对vector直接排序,最后字符串转string,return 即可.class Solution {public: string frequencySort(string s) {原创 2017-01-21 15:38:40 · 269 阅读 · 0 评论 -
LeetCode 383. Ransom Note
解题思路:这题主要考查字符串的查找,对于这个问题,倘若是一个字符串中必须连续的包含一个字符串,那么直接可以使用c++ string类中的str1.find(str2)这个方法.但是,题目的意思是稍微比这个难一些,是要求一个字符串的所有字符是另一个的子集,考虑使用map,将两个string 重新写入map中,再进行比较,即可.class Solution {public: bool can原创 2017-01-21 03:00:17 · 213 阅读 · 0 评论 -
LeetCode 455. Assign Cookies
解题思路:先排序,然后从大到小依次遍历比较class Solution {public: int findContentChildren(vector& g, vector& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int i=g.size()-1, j=s.size原创 2017-01-21 02:13:05 · 236 阅读 · 0 评论 -
LeetCode 413. Arithmetic Slices
解题思路:以三个为一组,每次计数加1,如果四个就加2,依次类推,最后全部求和class Solution {public: int numberOfArithmeticSlices(vector& A) { int res = 0; if (A.size() <= 2) return 0; else{原创 2017-01-21 00:40:08 · 234 阅读 · 0 评论 -
LeetCode 476. Number Complement
解题思路:这一题主要是考查十进制到二进制再按位取反输出十进制,所以按照题目要求写两个函数,一个是十进制转二进制,另一个是二进制转十进制,使用一个vector向量保存中间值class Solution {public: int findComplement(int num) { vector temp; temp = int_to_byte(num);原创 2017-01-19 18:32:48 · 232 阅读 · 0 评论 -
Leetcode 419 Battleships in a Board
解题思路:题目大意是战舰只能一行或者一列这样的排列,并且战舰必须隔开,不能有相交.所以只要遍历是'X'的点,并且'X'的上方和左侧不能是'X',这样就是一个战舰.class Solution {public: bool is_X(int i,int j,vector >& board){ if (board[i][j] != 'X') re原创 2017-01-19 18:15:35 · 205 阅读 · 0 评论 -
数据结构之链表
#ifndef NODE_H#define NODE_Hclass Node{public: int data; Node *next; void printNode(); };#endif#include "Node.h"#include using namespace std;void Node::printNode(){ cout<<data<<endl;原创 2017-02-09 22:32:56 · 272 阅读 · 0 评论 -
数据结构之二叉树 使用数组实现
二叉树可以使用数组简单的实现,其原理就是左右子节点和父节点的关系, 2*index + 1 为左节点,2*index + 2 为右节点class Tree{public: Tree(int size,int *pRoot); ~ Tree(); int *SearchNode(int nodeIndex); bool AddNdode(int nodeIndex, int d原创 2017-02-09 22:30:45 · 684 阅读 · 0 评论 -
数据结构之二叉树
最近做leetcode 上有好多题目是关于链表和二叉树的相关操作,于是回顾了一下数据结构,实现了链表和二叉树相应的操作.#ifndef NODE_H#define NODE_Hclass Node{public: Node(); Node *SearchNode(int nodeIndex); void DeleteNode(); void PreorderTraversal原创 2017-02-09 22:24:55 · 207 阅读 · 0 评论 -
LeetCode 462. Minimum Moves to Equal Array Elements II
解题思路:这题相对比较简单,第一次提交就AC了.首先先将vector排序,然后求中位数,每一个数与中位数的差就是需要移动的move,遍历一次求和即可.代码也很短class Solution {public: int minMoves2(vector& nums) { sort(nums.begin(),nums.end()); int count = 0;原创 2017-01-21 21:41:09 · 376 阅读 · 0 评论 -
LeetCode 167. Two Sum II - Input array is sorted
解题思路: 一开始暴力,结果超时,然后利用快排的思想,两个index,一个从头部开始,另一个从尾部开始,每次若是相加和小于target,那么小的index++;否则,大的index++class Solution {public: vector twoSum(vector& numbers, int target) { vector res; int原创 2017-01-21 22:42:03 · 162 阅读 · 0 评论 -
LeetCode 347. Top K Frequent Elements
解题思路:这一题和leetcode451题的思路是类似的,只不过是返回前topK出现最多的频率,所以自然而然地相当先将vector写进map中,然后根据value值排序,注意题目要求的时间复杂度,使用全排sort虽然也是采用的快排思想,有时也会达到O(N2),所以使用部分排序,堆排序,C++ stl里面有partial_sort,仅对前K个排序.class Solution {public:原创 2017-01-22 08:37:12 · 208 阅读 · 0 评论 -
LeetCode 111. Minimum Depth of Binary Tree
解题思路:DFS遍历整棵树,取最小深度class Solution {public: int minDepth(TreeNode* root) { if(root == NULL) return 0; if(root->left == NULL) return 1+minDepth(root->right);原创 2017-01-24 15:15:00 · 220 阅读 · 0 评论 -
LeetCode 112. Path Sum
解题思路:递归即可class Solution {public: bool hasPathSum(TreeNode* root, int sum) { if(root == NULL) return false; if(root->val == sum && root->left == NULL && root->right == NU原创 2017-01-24 10:41:16 · 230 阅读 · 0 评论 -
LeetCode 231. Power of Two
解题思路: 这题很简单,直接用2除即可,注意n = 0 的情况class Solution {public: bool isPowerOfTwo(int n) { while(n%2 == 0 && n != 0){ n /= 2; } return n==1; }};原创 2017-01-23 16:43:03 · 189 阅读 · 0 评论 -
LeetCode 263. Ugly Number
解题思路:类似质因数分解,但是因数只能为2,3,5,所以用m去整除数字不能超过6,之前写了一个mclass Solution {public: bool isUgly(int num) { if(num == 1) return true; if(num <= 0) return false;原创 2017-01-23 16:33:21 · 182 阅读 · 0 评论