自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AlgorithmEngine

ACM 算法讨论 C, C++研究

  • 博客(269)
  • 资源 (3)
  • 收藏
  • 关注

原创 [Leetcode] 35 - Search Insert Position

原题链接:https://oj.leetcode.com/problems/search-insert-position/这道题呢,其实也是二分查找的变种。思路如下,1. 因为涉及到插入位置,那么首先考虑边界问题,0或者n号位置。2. 刚才提到二分查找,那么首先我们每次循环有left,right,mid位置。如果A[mid] >= target而且A[mid - 1] 3.

2015-01-30 01:47:26 592

原创 [Leetcode] 38 - Count and Say

原题链接:https://oj.leetcode.com/problems/count-and-say/这道题其实考的还是细心了,外层循环n,内存循环当前字符长度。class Solution {public: string countAndSay(int n) { string res = ""; if (n < 0) retur

2015-01-29 17:18:17 818

原创 [Leetcode] 32 - Longest Valid Parentheses

原题链接:https://oj.leetcode.com/problems/longest-valid-parentheses/这道题的做法也是保持一个栈,做法其实和20 - Valid Parentheses类似。但是不同点是,要不断的跟踪当前最大的长度,所以必须将当前index信息也保存起来,这样的话可以使用2个栈,一个栈放char,一个栈放index。但是有什么方法可以存放2种信

2015-01-29 17:08:30 552

原创 [Leetcode] 50 - Pow(x, n)

原题链接:https://oj.leetcode.com/problems/powx-n/1. 首先处理特殊情况,比如0,1,-12. 关于普遍情况,考虑x^7 = x^(4 + 2 + 1),注意4,2,1都是2的n次方,所以转化为((x ^ 2) ^ 2) * (x ^ 2) * (x)。更加直观来看,我们可以将指数7看为二进制表示111,每一位从右到左对应的是x ^ 4,x

2015-01-29 16:07:08 813

原创 [Leetcode] 41 - First Missing Positive

原题链接:在不开辟另外空间的情况下,这道题做法比较tricky。做法如下:1. 预先扫描当前数组,将小于0的数值全部设置为n + 1,这样新的n + 1也不会对之后的计算产生影响2. 再次扫描数组,如果当前index绝对值小于等于n,则将A[A[index] - 1]设置为负值(所以之前为什么说取绝对值)。3. 最后扫描数组,如果当前对应值为正值,则说明当前index +

2015-01-28 17:40:57 619

原创 [Leetcode] 27 - Remove Element

原题链接:https://oj.leetcode.com/problems/remove-element/很简单一道题。。。class Solution {public: int removeElement(int A[], int n, int elem) { int front = 0; int idx = 0; whi

2015-01-27 16:43:18 542

原创 [Leetcode] 26 - Remove Duplicates from Sorted Array

原题链接:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/很简单的题,维持一个front标志和prev维持之前的值,边扫边比较。class Solution {public: int removeDuplicates(int A[], int n) { if

2015-01-27 16:36:10 543

原创 [Leetcode] 22- Generate Parentheses

原题链接:https://oj.leetcode.com/problemset/algorithms/这里用递归的方法实现。递归函数签名为void generate(int left, int right, int n, string prev)1. left,right分别为当前左右括号的个数,prev缓存之前的临时结果2. left小于n的时候,可以一直加入左括号3.

2015-01-27 15:17:07 539

原创 [Leetcode] 21 - Merge Two Sorted Lists

原题链接:https://oj.leetcode.com/problems/merge-two-sorted-lists/这道题用指针的指针实现,做法会非常简单干净。直接上代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *

2015-01-27 14:48:54 574

原创 [Leetcode] 20 - Valid Parentheses

原题链接:https://oj.leetcode.com/problems/valid-parentheses/检查是否是有效的括号序列。这里的解法是维护一个栈,如果是左括号,则push到栈中,如果是右括号,则检查栈顶的符号,如果是对应的做括号,则将之弹出。否则,则直接返回false。当字符串扫描到尾时,则检查栈是否是空,如果是空,则说明所有的括号都match上了。clas

2015-01-23 14:56:42 546

原创 [Leetcode] 19 - Remove Nth Node From End of List

原题链接:https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/这道题是移除倒数第n个node,做法是保持2个指针,一快一慢,快指针先走n步,然后快慢指针同时走,直到快指针变成null。这时将慢指针的值改为next的值。(注意,慢指针其实是指针的指针,以为为了改变指向当前node的指针的值)。个人感觉这题其实

2015-01-20 17:25:36 581

原创 [Leetcode] 16 - 3Sum Closest

原题链接:https://oj.leetcode.com/problems/3sum-closest/这道题基本就是3sum的变形,就直接按照3sum先排序,然后取当前数,再左右指针对于后面的数组向内扫描,但是因为是求closest,只有diff = 0的时候才能完全跳出当前循环,否则则需要继续扫描直到相遇或diff = 0。所以复杂度是排序时间加上扫描时间O(nlogn

2015-01-20 14:04:37 633

原创 [Leetcode] 4 - Median of Two Sorted Arrays

原题链接:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/这是一道比较搞脑子的一道题,细节较多。1. 这里用到的是findKth的思想,就是如果一共有奇数个元素,假设一共有t个元素,则中间元素为第t / 2 + 1个最大的,如果是偶数,则是t / 2位置和t / 2 + 1位置的平均数。2. 关于find

2015-01-13 17:34:42 578

原创 [Leetcode] 15 - 3Sum

原题链接:https://oj.leetcode.com/problems/3sum/经典3sum题,不过要注意这里的去重,去重是给原来这道题的基本形式加的难点。1. 数组如果大小小于3,那就没有任何结果。2. 将数组排序3. 然后循环数组,每次都选取i所在的当前值为第一个结果,然后选取left = i + 1和right = size - 1。则问题变为num[left]

2015-01-12 17:17:10 675

原创 [Leetcode] 14 - Longest Common Prefix

原题链接:https://oj.leetcode.com/problems/longest-common-prefix/LC里面最简单几道题之一,本人感觉这道题对面试的帮助非常小。如果真的要说有什么难点的话,就是尽早的跳出循环,避免不必要的比较吧。class Solution {public: string longestCommonPrefix(vector &

2015-01-12 16:29:56 553

原创 [Leetcode] 12 - Integer to Roman

原题链接:https://oj.leetcode.com/problems/integer-to-roman/这题也是简单题,重点是要维持一个罗马数字的数组,然后每位计算时候,则数组往后扫2位,使用同样的计算方式得出当前位的罗马表示。class Solution {public: string intToRoman(int num) { char

2015-01-12 15:44:18 536

原创 [Leetcode] 13 - Roman to Integer

原题链接:https://oj.leetcode.com/problems/roman-to-integer/比较简单的题,代码应该还可以稍微优化,更generic一些。class Solution {public: int romanToInt(string s) { if (s.size() == 0) return 0;

2015-01-12 15:19:45 601

原创 [Leetcode] 6 - ZigZag Conversion

题目链接:找规律的一道题,row往前进2步的话,如果投影在zigzag的路径上,则是走了一个V字形,也就是说每一行的相邻2步,都是走了同样的投影距离。然后主要抓到步数计算的规律即可。*注意step为0的情况,这时候要pick up最大的步长继续走。*注意row为1行的情况,最早判断,避免死循环,因为步长是0。*一直尝试po讲解照片,但是无论如何都显示不出来。有空搞定了传张照

2015-01-07 17:01:00 657

原创 [Leetcode] 7 - Reverse Integer

原题链接: https://oj.leetcode.com/problems/reverse-integer/做法直接看代码,无需对负数做特殊处理。但是必须考虑溢出的情况,考虑溢出的判断则将res * 10 + num % 10 class Solution {public: int reverse(int x) { int num = x;

2015-01-07 16:28:22 512

原创 [Leetcode] 9 - Palindrome Number

原题链接: https://oj.leetcode.com/problems/palindrome-number/非常非常简单的一道题。。。class Solution {public: bool isPalindrome(int x) { if (x < 0) return false; int ori = x;

2015-01-07 15:46:13 612

原创 [Leetcode] 5 - Longest Palindromic Substring

题目链接:https://oj.leetcode.com/problems/longest-palindromic-substring/这道题通常可以写出来的是2种做法。1. 保持一个index从前往后扫,每次index的循环中,保持left和right的index向两边扫,但是有2种情况,aba和abba。left和right的扫描要扫2次2. DP做法,2维矩阵* 可以

2015-01-07 14:28:05 475

原创 [Leetcode] 3 - Longest Substring Without Repeating Characters

原题链接:https://oj.leetcode.com/problems/longest-substring-without-repeating-characters/做法为保持两个index,left和right,也就是通常提到的维持一个窗口。每次right前进1,如果当前right指向的char之前未出现,则继续前进。如果当前right指向的char出现过 (假设这个char称为

2015-01-06 15:57:28 527

原创 [Leetcode] 2 - Add Two Numbers

原题链接: https://oj.leetcode.com/problems/add-two-numbers/一道很正常的链表的简单题,看code应该很容易理解。这里就不附上讲解了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;

2015-01-05 15:17:37 464

原创 [Leetcode] 1 - Two Sum

原题链接:https://oj.leetcode.com/problems/two-sum/撇开暴力破解,这道题有众所周知的两种做法:1. 先排序,再一前一尾双指针。这种方法要注意的是,排序时需要保存原来的index,这样的话其实是一个有着value和index的结构体基于value的排序。2. 直接hash。这道题需要注意的是,如果数组有两个相同元素,但是仍然构成唯一解。比如

2015-01-05 14:45:21 628

原创 [Leetcode]Palindrome Partitioning

[解题思路]由于要求列出所有的可能,直接上dfs[代码]class Solution {public: vector > res; vector> partition(string s) { vector partitions; dfs(partitions, s, 0); retur

2014-11-05 16:50:09 550

原创 [Leetcode] Word Ladder

class Solution {public: int ladderLength(string start, string end, unordered_set &dict) { unordered_set visited; visited.insert(start); queue que; int curL

2013-02-16 00:53:37 1552 2

原创 [Leetcode] Triangle

class Solution {public: int minimumTotal(vector > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function minPath = INT_MAX;

2013-02-13 10:39:36 635

原创 [Leetcode] Pascal's Triangle II

Pascal's Triangle IIOct 29 '122224 / 5320Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].Note:Could you optimize your al

2013-02-13 10:20:07 482

原创 [Leetcode] Combinations

class Solution {public: vector > combine(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function vector > res; vector buf(k);

2013-02-12 13:24:50 503

原创 [Leetcode] Trapping Rain Water

class Solution {public: int trap(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector height(n); for (in

2013-02-05 03:36:01 503

原创 Binary tree inorder iterator

#include #include #include struct TreeNode{ int data; TreeNode* left; TreeNode* right; TreeNode() {} TreeNode(int d, TreeNode* l, TreeNode* r) { data = d; left = l; right = r; }};

2013-01-30 11:16:11 518

原创 calculate reverse polish notation

#include #include using namespace std;bool isNumber(char c){ if (c >= '0' && c <= '9') return true; return false;}int calRPN(stack& stk){ char top = stk.top(); stk.pop(); if (isNumber

2013-01-29 13:52:44 447

原创 Reverse words in a string.

#include bool isValid = true;void swap(char* a, char* b){ if (*a != *b) { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }}void reverseWord(char* s, int begin, int end){ while (begin <

2013-01-29 13:35:44 531

原创 [Leetcode] Valid Number

class Solution {public: bool isNumber(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function if (s == NULL) return false; i

2013-01-24 14:57:32 631

原创 [LeetCode] Text Justification

class Solution {public: vector fullJustify(vector &words, int l) { // Start typing your C/C++ solution below // DO NOT write int main() function vector res; if (wo

2013-01-23 13:36:56 750

原创 [Leetcode] Valid Palindrome

class Solution {public: bool isPalindrome(string s) { // Start typing your C/C++ solution below // DO NOT write int main() function if (s.size() <= 1) return true;

2013-01-15 09:45:05 676

原创 [Leetcode] Next Permutation

class Solution {public: void nextPermutation(vector &num) { // Start typing your C/C++ solution below // DO NOT write int main() function if (num.size() <= 1)

2012-12-24 12:20:04 702

原创 [Leetcode] Unique Binary Search Trees

class Solution {public: int numTrees(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if (n == 0) return 1; int sum = 0;

2012-12-23 12:49:45 536

原创 [Leetcode] Simplify Path

class Solution {public: string simplifyPath(string path) { // Start typing your C/C++ solution below // DO NOT write int main() function stack stk; string

2012-12-17 02:44:50 525

原创 [Leetcode] N-Queens II

class Solution {private: int total;public: int totalNQueens(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function total = 0;

2012-12-16 12:29:16 541

设计模式大全 [design pattern概论]

对于设计模式精简的总结 适用于初学者 对于每个模式都形象的做了比喻 可以成为设计模式的先行版本

2011-02-05

动画编程 人体骨骼运动Forward Kinematics (Animation)

人体骨骼运动FORWARD KINEMATICS,利用opengl,c++实现,visual studio 平台

2010-03-08

JSP新闻发布+ACCESS数据库

一款新闻发布,完全使用JSP编写,内带ACCESS数据库,保证可以使用~!

2008-09-17

空空如也

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

TA关注的人

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