begin

七大排序及其时间测试

孤街浪徒 提交于 2020-03-11 14:42:49
一、冒泡排序 public class MyBubbleSort { /* 冒泡排序: 时间复杂度:O(n) ~ O(n^2) 最好:顺序 + 标记 最坏: 逆序 稳定性: 稳定 空间复杂度: 常数空间 ---> O(1) */ public static void bubleSort ( int [ ] arr ) { int len = arr . length ; //len是未排序的元素个数 while ( len > 0 ) { //flag:true 已经有序 boolean falg = true ; //一轮冒泡排序 for ( int i = 0 ; i < len - 1 ; i ++ ) { if ( arr [ i ] > arr [ i + 1 ] ) { MySort . swap ( arr , i , i + 1 ) ; falg = false ; } } if ( falg ) { //为真就是有序,有序就跳出 break ; } len -- ; } } } 二、堆排序 public class MyHeapSort { public static void shifDownBig ( int [ ] arr , int parent , int sz ) { int child = parent * 2 + 1 ; while ( child

使用Python实现量化交易机器人定时启动或停止小工具

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-11 13:05:55
使用Python实现量化交易机器人定时启动或停止小工具 作为全网功能强大、灵活易用的量化交易平台,发明者量化交易平台虽然使用门槛非常低,机器人程序占用资源很少。但是我们依然希望,让机器人需要运行的时候启动,不需要运行时停止。 例如,在做商品期货程序化、量化交易时,非开市时间占全天的绝大部分。这样我们就非常希望只让机器人在开市时间运行,每天只开市时间运行多节省费用,想想都激动。为了这个需求,我们可以使用Python语言编写一个在FMZ量化交易平台上运行的策略机器人,让这个机器人通过 发明者量化交易平台的扩展API接口,定时控制机器人的启动和停止。 有了需求,说干就干! 其实整个代码非常简单,调用发明者量化交易平台扩展API接口的例子直接可以使用,地址: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90 直接使用例子中的函数: def api(method, *args) 我们需要调用的接口也很简单,用到以下两个接口(在FMZ文档上可以查询到) RestartRobot 重启机器人接口,参数传入机器人ID即可。 使用具体 id ,这样调用即可: api('RestartRobot', id) StopRobot 停止机器人接口,参数也是机器人 ID 。 机器人 ID 查看、获取,截图:

翻转单词顺序列 --剑指offer

守給你的承諾、 提交于 2020-03-10 17:08:35
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路: 先整体翻转 在逐个单词翻转 另外几种思路:1 逐个单词入栈 最后出栈 2 直接split分开单词 然后从后边拼接 3 第二个单词拼接到第一个单词前边 第三个在拼接到前边 public class Solution { public String ReverseSentence(String str) { if( str == null||str.trim().equals("")){ return str; } char[] chars = str.toCharArray(); int len=str.length(); reverse(chars,0,len-1); int f=0,l=0; while (l < len){ if(chars[l] == ' '){ reverse(chars,f,l-1); l ++; f = l; } if(chars[f] == ' '){ f ++; } if

FPGA状态机跑飞问题记录

六月ゝ 毕业季﹏ 提交于 2020-03-10 13:20:32
(1)状态机跑飞的原因 两种可能:1)状态机的输入信号与本地时钟不同步,出现了冒险竞争现象,造成状态机死锁。 2)状态机综合后没有生成一旦进入非有效状态便立即复位,然后进入某个有效状态的电路。 解决办法:1)把外部引入的异步输入信号,做同步处理,作为本状态机的输入。 2)用综合指令或者约束,强行规定综合后必须生成一旦进入非有效状态便立即复位随即进入有效状态的电路。 输入信号是指除了从当前状态反馈信号以外的信号,即从状态机外部输入的信号。 是否会产生一旦进入非有效状态立即进行强制复位的电路,并不会因为你在状态机中加入when others=> state1 综合后就一定生成这样的电路。若想生成这样的电路,必须在综合时要通过综合指令(约束)命令综合器强制生成,才会生成的。 原文链接:https://blog.csdn.net/xiaoxiao_rabbit/article/details/102751545 (2)问题记录 本次的状态机跑飞的原因是第一种,即:状态机的输入信号与本地时钟不同步,出现了冒险竞争现象,造成状态机死锁 实验:使用状态机按键防抖,实现二进制累加,二进制的表现形式为四个LED灯 最初代码:(注:变量abcd没有任何意义,仅在调试中使用) 1 module key_detect( 2 clk , 3 rst_n , 4 key , 5 led , 6 abcd ,

1024 科学计数法

假如想象 提交于 2020-03-10 12:33:11
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。 输入格式: 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。 输出格式: 对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。 输入样例 1: +1.23400E-03 输出样例 1: 0.00123400 输入样例 2: -1.2E+10 输出样例 2: -12000000000 这个题不难但比较繁琐,一步一步将字符串转换为数字。 #include <iostream> #include<algorithm> #include<string> using namespace std; int main() { string t,p; cin >> t; int i=2,k=0; p.insert(p.end(), t.begin() + 1, t.begin() + 2); while (t[++i] != 'E'

C++ non-const lvalue reference cannot bind to a temporary

大憨熊 提交于 2020-03-09 18:44:31
1. 问题代码 #include <iostream> #include <vector> //注意begin和end形参都声明为引用 bool find_int(std::vector<int>::iterator &begin, std::vector<int>::iterator &end, int v){ while(begin != end){ if(*begin == v) return true; begin++; } return false; } int main(){ std::vector<int> a(3, 100); //a.begin()和a.end()的返回值作为实参传入find_int中 std::cout << find_int(a.begin(), a.end(), 100) << std::endl; } 2. 编译错误 g++ -Wall -std=c++11 -o hello hello.cpp 3. 原因分析 non-const lvalue reference cannot bind to a temporary 根据编译错误提示可以知道,不能将形参begin、end绑定到a.begin()和a.end()的返回值,因为该返回值是一个 临时量 ,临时量的生命周期可能在a.begin()和a.end()执行完后就结束了。

AtCoder Beginner Contest 158 D - String Formation

℡╲_俬逩灬. 提交于 2020-03-09 12:49:12
直接模拟操作的话肯定会超时,因为每次添加的是一个字符,我们就可以根据翻转次数判断是加在前面还是后面。但是直接用string±还是会超时,换了 insert才过。 AC代码: int m , p ; int ans , res , x ; int n , q , k ; string s , t ; int op ; int cnt ; char c ; int main ( ) { cin >> s ; sd ( q ) ; cnt = 0 ; while ( q -- ) { sd ( op ) ; if ( op == 1 ) { cnt ++ ; } else { sd ( k ) ; cin >> c ; if ( cnt & 1 ) { if ( k == 1 ) s . insert ( s . end ( ) , c ) ; else s . insert ( s . begin ( ) , c ) ; } else { if ( k == 1 ) s . insert ( s . begin ( ) , c ) ; else s . insert ( s . end ( ) , c ) ; } } } if ( cnt & 1 ) reverse ( s . begin ( ) , s . end ( ) ) ; cout << s ; return 0 ; }

chapter_1 : 方程组的几何解释

て烟熏妆下的殇ゞ 提交于 2020-03-09 00:45:47
方程组的几何解释 row picture column picture matrix 例子1: 方程组 2 x − y = 0 2x -y = 0 2 x − y = 0 − x + 2 y = 0 -x + 2y = 0 − x + 2 y = 0 系数矩阵 [ 2 − 1 − 1 2 ] [ x y ] = [ 0 0 ] \left[\begin{matrix} 2 & -1 \\ -1 & 2 \end{matrix}\right] \left[\begin{matrix}x \\ y \end{matrix} \right] = \left[\begin{matrix}0 \\ 0 \end{matrix} \right] [ 2 − 1 ​ − 1 2 ​ ] [ x y ​ ] = [ 0 0 ​ ] A = [ 2 − 1 − 1 2 ] , x = [ x y ] , b = [ 0 0 ] A = \left[\begin{matrix} 2 & -1 \\ -1 & 2 \end{matrix}\right], \pmb x = \left[\begin{matrix}x \\ y \end{matrix} \right],\pmb b = \left[\begin{matrix}0 \\ 0 \end{matrix} \right] A = [ 2 − 1

线性代数:矩阵的逆

倖福魔咒の 提交于 2020-03-07 22:17:45
关于矩阵的逆有很多性质和定理,例如,可逆矩阵一定是方阵、满秩矩阵、非奇异矩阵,可逆矩阵的行列式的值不为零等等。在证明一个矩阵是不可逆矩阵时,Strang教授讲了一种几何的思路: 矩阵不可逆的证明 根据可逆矩阵的定义,如果方阵 A ∗ B = I \mathbf{A} * \mathbf{B}=\mathbf{I} A ∗ B = I ,则 A \mathbf{A} A 和 B \mathbf{B} B 互称逆矩阵。下面是一个二维不可逆矩阵的例子,有矩阵 A = [ 1 2 2 4 ] \mathbf{A}=\begin{bmatrix}1&2\\2&4\end{bmatrix} A = [ 1 2 ​ 2 4 ​ ] ,如果 A \mathbf{A} A 可逆,则有 [ 1 2 2 4 ] ∗ B = [ 1 0 0 1 ] \begin{bmatrix}1&2\\2&4\end{bmatrix} * \mathbf{B}=\begin{bmatrix}1&0\\0&1\end{bmatrix} [ 1 2 ​ 2 4 ​ ] ∗ B = [ 1 0 ​ 0 1 ​ ] ,对矩阵 [ 1 2 2 4 ] \begin{bmatrix}1&2\\2&4\end{bmatrix} [ 1 2 ​ 2 4 ​ ] 中的两个列向量作某种线性组合会得到列向量 [ 1 0 ] \begin

二分法-最长上升子序列

我是研究僧i 提交于 2020-03-07 15:19:45
思路:使用一个栈来求最长上升子序列的长度,当栈为空或者待插入元素大于栈顶元素时就入栈,否则替换栈中小于等于待插入元素的数并替换,最终栈的长度即为最长上升子序列的长度. 优点:使用二分查找,时间复杂度为O(nlogn). #include<iostream> #include<vector> using namespace std; vector<int> v; int solution(int arr[], int length) { for(int i = 0; i < length; i++) { if(v.size() == 0 || arr[i] > v[v.size() - 1]) //如果栈空或者大于栈顶就入栈 v.push_back(arr[i]); else //查找栈中小于等于arr[i]的元素并替换 { int begin = 0, end = v.size() - 1; int index = -1; while(begin <= end) { int mid = (end - begin) / 2 + begin; if(arr[mid] < arr[i]) begin = mid + 1; else { index = mid; end = mid - 1; } } v[index] = arr[i]; } } } int main() { int arr