枚举全排列

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
/**
枚举ABC 的全排列
*/
for(char a='A'; a<='C'; a++)
{
for(char b='A'; b<='C'; b++)
{
if(a==b) continue;
for(char c='A'; c<='C'; c++)
{
if(c==a||c==b)continue;
else
cout<<a<<" "<<b<<" "<<c;
}
cout<<endl;
}
}
return 0;
}

解决匹配算式问题

ABCD * E = DCBA

数的范围最小值在 1023 最大值在 9876

方式解决拆分:

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
int num1,num2,A,B,C,D,E;
for(num1=1023;num1<=9876;num1++){
A=num1/1%10;
B=num1/10%10;
C=num1/100%10;
D=num1/1000%10;
if(D==0||A==B||A==C||A==D||B==C||B==D||C==D)continue;
num2=A*1000+B*100+C*10+D;
for(E=2;E<=9;E++){
if(E==A||E==B||E==C||E==D)continue;
if(E*num1==num2){
cout<<num1<<"*"<<E<<"="<<num2;
}
cout<<endl;
}
} return 0;
}

贪心解决 最值问题

规则: 利用局部最优解 加起来求总的 全局最优解是贪心法的主要规则

例: 在 5 6 2 9 4 1 求能组成的饿最大三位数

难点: 位数如何去控制 ,可以考虑使用 循环除 缩小 范围的方式安排

for(int a=100;a>0;a/=10;)

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
int pro[]={5,6,2,9,4,1};
int current=0,MAX=10;int num=0;
int len=sizeof(pro)/sizeof(pro[0]);
for(int a=100;a>0;a/=10){
current=0;/归位
for(int b=0;b<len;b++){
if(pro[b]>current&&pro[b]<MAX){
current=pro[b];
}
}
MAX=current;
num+=current*a;
}
cout<<num;
return 0;
}

二分查找

思想 : 在一组 确定排好序的 数组中 定位中点 把需要查找的值与中间的值进行比较如果是相同的值 ,则找到,如果不是又比当前值大 则继续在右边进行查找, 小于则继续在左边值进行查找, 直到找到位置.

复杂度为 线性序列

#include <iostream>
#include <algorithm>
#include <string>
using namespace std; int main()
{
int pro[]={5,6,2,9,4,1,25,65,24,15,77};
sort(pro,pro+sizeof(pro)/sizeof(pro[0]));
int low ,mid,high;
low=0;high=sizeof(pro)/sizeof(pro[0])-1;
int findn;
cin>>findn;
while(low<=high){
mid=(low+high)/2;
if(pro[mid]==findn) break;
if(findn>pro[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(low>high) cout<<"no find";
else
cout<<"find x:"<<mid; return 0;
}

暴力枚举子串

外两成循环的维持梯度控制,最后一层循环维持如果存在子串 那么继续拆分。

#include <iostream>
#include <string>
#include <vector>
using namespace std; int main(){ string str;
cin>>str;
char a[str.length()];
int i,j,k;
for(i=0;i<str.length();i++){
for(j=i;j<str.length();j++){
for(k=i;k<=j;k++){
a[k-i]=str[k];
}
a[j-i+1]='\0';
cout<<a<<endl;
}
} return 0;
}

LCS问题

package com.dsw.test;

public class CalculateMaxString {

	public static void main(String[] args) {
String src = "abcdefghijklmnopqrstuvwxyz";
String tar = "1234567890abcdfrgtddd12321414";
char [] srcCh = src.toCharArray();
char [] tarCh = tar.toCharArray();
int count = 0;
int max = 0;
StringBuilder sb = null;
String maxString = null;
for(int i=0;i<srcCh.length;i++)
for(int j=0;j<tarCh.length;j++){
sb = new StringBuilder();
int k=j;
int m = i;
count = 0;
while(srcCh[m] == tarCh[k]){
count++;
sb.append(tarCh[k]);
k++;
m++;
}
if(count > max){
max = count;
maxString = sb.toString();
}
}
System.out.println("原字符串:" + src);
System.out.println("子字符串:" + tar);
System.out.println(maxString);
} }

C++ 排列最优解算法思想的更多相关文章

  1. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  2. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  3. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...

  4. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  5. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  6. JVM三种垃圾收集算法思想及发展过程

    JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...

  7. 排列熵算法简介及c#实现

    一.   排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...

  8. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  9. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

随机推荐

  1. 关于Videodownload helper的下载问题

    Videodownload helper是火狐浏览器的一个视频音频嗅探插件, 解压文件的时候处于解压状态还没有解压完的时候不能关闭原来的窗口 所以这个下载软件也同理.没有下载完一个视频之前不能把这个窗 ...

  2. 在Jenkins中配置执行远程shell命令

    1.想要 远程登录到linux服务器并执行相应的shell脚本,需要在jenkins上安装插件enkins SSH plugin 2. 安装了这个插件后,进入系统的配置管理中配置 SSH remote ...

  3. Throwable.异常

    异常: 在运行期间发生的不正常情况. 在JAVA中用类的形式对异常的情况进行了类的封装. 这些描述不正常情况的类就称为异常类. 异常类就是java通过面向对象的思想将问题封装成了对象.用异常类对问题进 ...

  4. python 装饰器 一篇就能讲清楚

    装饰器一直是我们学习python难以理解并且纠结的问题,想要弄明白装饰器,必须理解一下函数式编程概念,并且对python中函数调用语法中的特性有所了解,使用装饰器非常简单,但是写装饰器却很复杂.为了讲 ...

  5. IntelliJ IDEA 2017.1.5迁移eclipse,SSM项目,通过jrebel实现热部署

    1.首先打开idea,配置SVN版本控制器的路径 2.配置maven 3.配置jrebel热部署的路径 4.从svn到出项目 5.配置配置tomacat参数-server -XX:PermSize=1 ...

  6. JDK1.8源码(四)——java.util.Arrays 类

    java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...

  7. 常用Markdown公式整理 && 页内跳转注意 && Markdown preview

    目录: 常用Markdown公式及注意事项 标题 列表 链接 区块 代码块 / 引用  粗体和斜体 文字块 图片 表格 横线 页内跳转注意事项 其他重要需注意 Markdown preview 前提: ...

  8. poj supermaket (贪心)

    http://poj.org/problem?id=1456 #include<cstring> #include<iostream> #include<algorith ...

  9. 分区表SQL调优/优化(Tuning)时容易“被欺骗”的场景之一

    近几天没有用户找到,除了看看书,就是上网浏览点东西,好不惬意.可惜好景不长,正在享受悠闲惬意的日子时,一个用户的工作人员QQ找到我,说他们在统计一些数据,但一个SQL特别慢,或者说就从来没出过数据,我 ...

  10. Beta 第五天

    今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...