C++ 排列最优解算法思想
枚举全排列
#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++ 排列最优解算法思想的更多相关文章
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- 排列组合算法(PHP)
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...
- C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...
- AC自动机——多模式串匹配的算法思想
标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...
- JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...
- 排列熵算法简介及c#实现
一. 排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...
- 基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...
- 基本算法思想之递推算法思想(C++语言描述)
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...
随机推荐
- BZOJ4825 单旋
分析:一道水题,去年考场发现了特点但是不会splay维护挂了,然后现在我写了个treap. 画一画图就可以解决这道题了,自己试一下. 代码如下: #include<bits/stdc++.h&g ...
- 第三方工具 - echarts中 设置x||y轴文案、提示文字等为固定字数,超出显示"..."
起初看到这种需求的时候,我是这个状态 对,我是拒绝的,人家echats画出来就是一个canvas,你让我怎么加... 但是,作为一个"有点追求的"前端,我得想招试试总结下来,唯一的 ...
- Sublime + Python3 + 虚拟环境 + 去除 中文输出乱码
MacBook Pro Retina 13 2013年底版 所用软件 1. Sublime Text 3安装 Virtualenv package 2. 用 iterm2 .或者终端安装zip:apt ...
- Java中调用文件中所有bat脚本
//调用外部脚本String fileips=null;//所有的路径String[] files=null;String fileip=null;//单个路径try { InputStream is ...
- python全栈开发-Day8 函数基础
python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...
- 笔记:XML-解析文档
要处理XML文档,就要先解析(parse)他,解析器时这样一个程序,读入一个文件,确认整个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素,Java库提供了两种XML解析器: 像 ...
- STL --> 高效使用STL
高效使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍: 熟悉以下条款,高效的使用STL: 一.当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任 ...
- PHP 环境搭建篇
0x01 PHP 简介 PHP 是一种流行的通用脚本语言, 特别适合 web 开发. 快速, 灵活, 务实, PHP 的所有东西, 从你的博客到世界上最流行的网站. 0x02 PHP环境要求 Tips ...
- Sublime Text、webstorm等编译器快速编写HTML/CSS代码的技巧
Sublime Text.webstorm等编译器,如果你从事Web前端开发的话,对这几款软件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演 ...
- RESTFul API设计指南及使用说明
RESTFul API设计指南及使用说明 一. 协议 API与用户的通信协议,使用HTTP协议. 二. 域名 应尽量将API部署在专用域名之下(http://api.example.com) 也可以将 ...