编程练习
大本-白
这个作者很懒,什么都没留下…
展开
-
使用Python语言写一个简单的KMP模式匹配算法实现
KMP算法简介 KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内(O(m+n):m和n分别为模式字符串与主串的长度)完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。 KMP模式匹配的关键点在于该算法会根据模式字符串生成一个Next跳转表。在进行匹配时,一旦发生不匹配,算法并是将模式串移动1位,再从头开始匹配,而是原创 2016-05-23 17:03:20 · 2251 阅读 · 0 评论 -
笔记_postMessage/sendMessage/getMessage/peekMessage
1、 首先PostMessage是异步消息投放,SendMessage是同步消息投放函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);同步投放的SendMessage函数并不讲消息放到消息队列中,而是直接为制定窗口调用函数处理函数,待消息处理函数完成处理后,并将消息处理函数的结果返回。原创 2016-08-05 20:11:27 · 602 阅读 · 0 评论 -
leetcode之palindrome-partitioning-ii(动态规划)
题目描述Given a string s, partition s such that every substring of the partition is a palindrome. Return the minimum cuts needed for a palindrome partitioning of s. For example, given s =”aab”, Return1s原创 2016-06-12 19:38:16 · 654 阅读 · 0 评论 -
找零钱问题中动态优化的空间复杂度优化
找零钱问题假设,老王有N张纸币,纸币的面值用arr[N]表示,现在老王要给隔壁的老李M元钱,请问,如何组合手中的纸币,使给出的纸币张数最少?如果可以,返回最少的纸币张数,否则返回-1。问题分析 假如要给老李10元钱,老王的手中又有一张5元的纸币,那么,能使用该5五元钱的的情况必须是其他的纸币能组合成剩下的5元钱。 -》 动态规划问题!!! 基础算法,用一个 N*(M+1) 维的数组res来作为状原创 2016-06-13 22:15:16 · 848 阅读 · 0 评论 -
类斐波那契问题中动态规划的时间复杂度优化
关键思路 (1)从递推公式求解状态转移方程->转移矩阵 f(n)= f(n-1)+f(n-2) [f(n),f(n-1)] = [ f(1), f(2)] * [(1,1);(1,0)]^(n-2) (2)优化求矩阵的幂问题!!!#include <iostream>using namespace std; void matrixMulti(int const m1[][转载 2016-06-13 11:36:22 · 1091 阅读 · 0 评论 -
leetcode之single number
Question: Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it wit原创 2016-06-12 15:09:47 · 354 阅读 · 0 评论 -
逆序对问题的另一种经典解法:归并排序
逆序对问题: 在树状数组的应用中已经对逆序对问题进行了一次解答。 下面说明另一种经典解法:归并排序#include <iostream>#include <stdio.h>using namespace std;int num[1005];int temp[1005];int ans;int merge_sort(int s, int e){ if(s == e) // 返回转载 2016-05-30 10:18:40 · 411 阅读 · 0 评论 -
树状数组与其应用(Python实现)(1)
数组-树状数组如果程序需要维护一个数组的**前缀和**,S[i] = a[0]+ a[1] + …… + a[i-1]. 那么一旦数组中的一个元素 a[k]发生改变,则S[k+1] …… S[N] 都会发生变化(N是数组长度)。最坏情况下,前缀和的更新需要O(N)时间,当n很大而数组数据又经常变化时,程序的运行效率就会变得很低。对于该类问题,运用**树状数组**是一个不错的选择(另一种方法是**线段原创 2016-05-26 15:28:02 · 2815 阅读 · 0 评论 -
树状数组及其应用(2)
上一篇Blog讲述了树状数组的基本性质以及最典型应用:单点更新与区间求职 本文将给出树状数组的另外两种应用: (1)区间更新与单点求值! (2)求逆序对!首先,来回顾一下什么是单点更新与区间求值:在该应用中,现状数组的值实际上是存储了简单数组中某一个区间范围内的所有元素的和:C[4] = A[4]+C[3]+ C[2] = A[1]+A[2]+A[3]+A[4]在这样的情况下,点更新和区转载 2016-05-27 20:45:18 · 557 阅读 · 1 评论 -
KMP算法,Next跳转表的应用(1)
题目: 定义一个字符串间的运算符 “*”: a=’abc’; b = “def” -> a*b = “abcdef”; a^0 = “” (空字符串) a^(n+1) = a*a^n 现输入一系列的字符串,求对于输入的字符串s,是否存在一个s的子串a,使得 s = a^n; 若存在,求出最小长度的a,以及对应的n的值,此时n应该达到最大值。分析: 首先,在最不理想的状态下: s = s翻译 2016-05-24 10:38:52 · 744 阅读 · 0 评论 -
动态规划-问题示例与解题思路(采药问题 - nefu19)
题目: 有一个药圃中种了一些药材,采摘不同药材需要不同的时间,可以获得不同的收益,问在给定时间T内,采摘药材可以获得的最高的收益! * 输入: 第一行输入两个整数T和M,分别为给定时间和药材的数量;第2至第M+1行输入药材的采摘时间t和价值* eg: 70 3 71 100 69 1 1 2 输出: 3解题思路:设想在给定的时间t中,用了t1时间来采摘一定的药材翻译 2016-05-03 20:02:47 · 695 阅读 · 0 评论 -
[编程题]确定两串乱序同构的几种解答方式
题干:给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。 测试样例: “This is nowcoder”,”is This nowcoder” 返回:转载 2016-05-02 19:31:33 · 527 阅读 · 0 评论 -
条条大路通罗马 - 华为笔试题目
// 题目本身不难,就是一个深度优先搜索// 但是-网上有一些博客给出的是错误答案// 做这个深度优先搜索的关键问题,在于如何避免重新去节点,而不是去避免已经走过的路// 在一次向下的深度搜索过程中,不能返回已经走过的节点// 但是在完成一次到底的DFS后,在返回时必须重置 “走过”状态// 1 -》 2 —》3// 1-》4-》3 是两条一样的路径#include<iostream>原创 2016-09-22 20:58:17 · 954 阅读 · 0 评论