算法
Alex-xi
hey!
展开
-
LeetCode刷题笔记-007-reverse integer
题目描述:Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input: -123Output: -321Example 3:Input: 120Output: 21Note:Assume we ...原创 2018-10-11 08:54:04 · 108 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。1、思路两种方法,一种是从1到n遍历,每次通过对10求余数判断整数的个位数字是不是1,大于10的除以10之后再判断。我们对每个数字都要做除法和求余运算以求出该数字中1出现的次数。如果输入数字n,n有O(logn)位,我们需要判断每...原创 2019-01-25 21:28:53 · 451 阅读 · 0 评论 -
最小窗口子串(求原字符串中包含给定字符串2的最小子串)
1 // MinWindowOfSubstr.cpp: 定义控制台应用程序的入口点。 2 /* 3 求原字符串中包含给定字符串2的最小子串 4 */ 5 #include "stdafx.h" 6 #include<iostream> 7 #include<string> 8 #include<map> 9 using namespac...原创 2019-01-21 10:29:34 · 558 阅读 · 0 评论 -
打印集合中所有子集
1 // PrintSubSet.cpp: 定义控制台应用程序的入口点。 2 // 3 /* 4 打印集合中的所有子集,利用位运算 5 */ 6 #include "stdafx.h" 7 #include<iostream> 8 9 using namespace std;10 11 template<typename T>12 13 ...原创 2019-01-21 10:09:09 · 1432 阅读 · 0 评论 -
顺时针打印矩阵
二、题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:则依次打印出数组:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。 class Solution { 2 public: 3 vector<int> printMatrix(vector<vector<int> ...原创 2019-01-24 18:44:37 · 279 阅读 · 0 评论 -
动态规划-凸多边形的最优三角形划分(思想与矩阵链相乘一致)
问题相关定义:(1)凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的弦的集合T。 (2)最优剖分:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小。 凸多边形三角剖分如下图所示: 相关性质在凸多边形P的一个三角形部分T中,各弦互不相交,且弦数已达到最大,即P的任一不在T中的弦必与T中某一弦...原创 2019-02-23 11:04:17 · 3271 阅读 · 0 评论 -
动态规划-背包问题(跳跃点解法)
对于 0-1 背包问题,DP的解法很普遍。还有一种“跳跃点”的解法,该方法的提出,是根据背包求解过程中的记录表 v(i,j)的函数性特点而来的。(v(i,j)表记录的是前 i 种物品,达到总重量 j 时的最大利益)可以Dp 求解一下,然后打印一下表进行观察,也可以根据这个求解原理,可以很自然的想到,v(i,j)的函值, 当 i 确定时,这是一个关于 j 的非递减函数,且由“跳跃点”将函数...原创 2019-02-23 11:04:26 · 6683 阅读 · 2 评论 -
算法设计与分析04-排序问题
①冒泡排序:量量比较待排序数据元素的大小,发现两个数据元素的次序相反时进行交换,直到没有反序的数据元素为止。时间复杂度是O(n*2)。稳定的。下面给出两种排序算法,我比较喜欢第二种,因为第二种才能真正解释冒泡的原理public class bubble1 { public static void main(String[] args) { int[] array...原创 2018-10-24 09:27:02 · 423 阅读 · 0 评论 -
算法设计与分析05-最近点对算法
1.题目描述:设S是平面上n个点的集合,在这一节中,我们考虑在S中找到一个点对p和q的问题,使其相互距离最短。换句话说,希望在S中找到具有这样性质的两点p1 = (x1,y1)和p2 = (x2,y2),使它们间的距离在所有S中点对间为最小2.解题思路一共分为三种情况情况1:点数小于等于二时:直接计算,求该两点之间的距离。情况2:集合中有三个点:两两比较,求三个点中的最近的两个...原创 2018-10-25 14:08:35 · 927 阅读 · 0 评论 -
证明,一个环状链表(首尾相连)的两个指针head1和head2 从同一个节点出发,head1每次走一步, head2 每次走两步,他们第一次相遇于出发的节点
一个环状链表(收尾相连),两个指针 head1和head2 从同一个节点出发,head1每次走一步, head2 每次走两步,请证明,两个指针第一次相遇于出发的节点。设两个指针走的次数为 x,使用简单的数学公式即可证明。难度 1 面。考察基本的数学 知识。设链表有 m 个元素,head1 在第一次相遇时走了 n 步,c 为 head1 和 head2 第一次相遇的节点距离出发节点的距离。则...原创 2018-10-22 20:39:53 · 492 阅读 · 1 评论 -
算法设计与分析03-十进制转二进制问题
10进制数转2 进制数题目:2 进制除了 0,1,还可以用 2 表示。例如:1-> 12-> 10 or 023->114 ->100 or 020 or 012问题:这样一个十进制数转为二进制数,就不是唯一的了。现求十进制数 N 转换为这种二进制数的所有表示方法数。f(0)=1, f(1)=1, f(2)=2,f(n) = f( (n-1)/2) 当 n ...原创 2018-10-22 20:22:50 · 389 阅读 · 0 评论 -
算法设计与分析02-走台阶问题
走台阶问题,一次可以走1,2,3级,都 N级台阶的方法数 。初始:f(0) = 0; f(1) =1; f(2) = 1 + 1 = 2;递推公式:f(n) = f(n - 1) + f(n-2) + f(n - 3)解题思路:因为一次可以走1,2,3级,所以在第n级台阶时,能走到第n级台阶的方法为:1,从第n-1级台阶走一级到底n级台阶。2.从第n-2级台阶走2级到第n级。3.从第n...原创 2018-10-22 20:19:34 · 875 阅读 · 0 评论 -
算法设计与分析01-链表的逆置
一.最常用的方法:LNode* ReverseList(LNode* head){ if (head == NULL) return NULL; if (head->next == NULL) return head; LNode* pre = NULL; LNode* Cur = head; LNode* Ne...原创 2018-10-22 19:46:52 · 410 阅读 · 2 评论 -
LeetCode刷题笔记-001:two-sum
给定一个数组nums,一个目标值target,在数组找两个数满足这两个数的和为target。返回这两个数在nums中的下标。example:nums = [2,7,11,15]target = 9return [0,1]题意分析:在数组中寻找两个数a,b,使得a+b = target,返回a,b的下标思路分析:这是一道经典的在数组中找和为定值的题目。通常这种题目...原创 2018-10-10 15:56:17 · 165 阅读 · 0 评论 -
LeetCode刷题笔记-009:palindrome number(回文数)
题目描述:Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.Example 1:Input: 121Output: trueExample 2:Input: -121Output: fal...原创 2018-10-11 09:25:24 · 146 阅读 · 0 评论 -
数字在排序数组中的出现次数(比较灵巧的办法)
题目描述统计一个数字在排序数组中出现的次数。 3 4 //因为data中都是整数,所以可以稍微变一下,不是搜索k的两个位置,而是搜索k-0.5和k+0.5 5 //这两个数应该插入的位置,然后相减即可。 6 class Solution { 7 public: 8 int GetNumberOfK(vector<int> data ,int k) { ...原创 2019-01-21 16:50:31 · 163 阅读 · 0 评论