i= 0表示有序数组arr1的首元素,j = 未知,表示有序数组arr2的首元素 ①首先比较第一个有序数组arr1和第二个有序数组arr2第一个元素的大小 如果arr1[i] < arr[j],i++ 否则 index记住j的位置,index就是j变化之前的位置 ②如果arr2[j] < arr[i],证明后面的元素小于后面的元素,需要进行往前的置换,所以j++,但是要保证j++不能越界 ③进行了①和②之后,已经找到了需要置换两个数组的范围,使用swap交换 ④进行i下标的更新,因为i+j-index已经排序好了,所以i要加上j-index ⑤直到while(i < j &&j < 数组的长度)不成立,程序结束 #include <iostream> #include <vector> #include <algorithm> using namespace std; template <typena 继续阅读 >>


陈文浩 18/04/08 22:40:31
本文需要您有Python变量查找的知识,如果您不知道,可以参考上篇博文Python变量查找LEGB原则 构成闭包的条件 外函数中定义了内函数 内函数使用了外函数的变量 外函数的返回值是内函数的引用 以下是一个简单的闭包的定义 def outer(): b = 1 def inner(): #外部函数内定义了内部函数 print(b) #内部函数使用了外部函数的变量 return inner #外部函数的返回值是内函数的引用 使用 a = outer() a() #1 我们先是调用了外部函数outer()将其返回值赋值给了a变量,那么a变量实际上是指向的内部函数inner,当我们调用a时,相当于调用了inner,然后打印了外部变量b的值。 似乎没什么不妥 但是,我们知道,函数中的局部变量,在函数结束时会释放掉,但是上例中,执行a()的时候outer()已经退出了,那么对应的b也就释放了,但是inner还调用了b变量,这就是闭包。 闭包变 继续阅读 >>


李余通 18/04/08 21:02:36
Spring之旅 Spring是一个开源框架,最早由Rod Johnson创建。是为了解决企业级开发的复杂性而创建的,但不仅仅局限与服务器端的开发,任何Java应用都能在简单性、可测试性和松耦合性方面从Spring获益。 为了降低Java开发的复杂性,Spring采用以下4种关键策略: 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 注:POJO(Plain Ordinary Java Object) , 简单的Java对象,实际就是普通的JavaBeans。是为了避免和EJB混淆所创造的简称。 Spring成功的关键在于依赖注入和AOP,它们也是Spring框架的核心部分。 DI是组装应用对象的一种方式,借助这种方式对象无需知道依赖来自何处或者依赖的实现方式。对象在运行期赋予它们所依赖的对象,依赖对象通常会通过接口了解所注入的对象,这样的话就能确保低耦合。 AOP可以帮助应用将散落在各处的逻辑 继续阅读 >>


李猛 18/04/08 20:09:01
Problem Description 你想通过交换两个相邻的序列元素来处理一系列n个不同的整数,直到序列按升序排列。然后它需要多少次。 例如,1 2 3 5 4,我们只需要一个操作:交换5和4。 Input 输入由许多测试用例组成。每种情况由两行组成:第一行包含一个正整数n(n <= 1000); 下一行包含从1到n的n个整数的置换。 Output 对于每一种情况,在独立的一行内输出最少交换的次数。 Sample Input 3 1 2 3 4 4 3 2 1 Sample Output 0 6 最近想找个递归分治的题目练练,就碰到这题。该题要求将一个序列中所有相邻逆序的元素恢复成升序的序列。 方法一 最原始的方法,利用两重循环进行枚举。该算法的时间复杂度为O(n^2),这中没什么好说的,虽简单但是效率比较低,不能通过测试。 import java.util.Scanner; public class Main { pub 继续阅读 >>


李猛 18/04/08 20:06:15
实际上很简单,贴上方法。 首先,你应该有.desktop文件,这个文件相当于win的快捷方式,通过这个可以找到安装目录。 下载最新版本的.tar.gz包 解压。譬如我的在/opt/中安装着,那么tar zxf idea.tar.gz -C /opt/ 把原始的目录重命名,之后把刚解压的修改为新的原始的名字。 启动idea,弹框选择从老版本导入配置 没问题后就可以把老版本的删除了 作者:baidu_35085676 发表于 2018/04/08 20:05:14 原文链接 https://blog.csdn.net/baidu_35085676/article/details/79856983 阅读:79 继续阅读 >>


李余通 18/04/08 20:05:14
提前声明 ,这是一篇水博!!! 1.使用智能指针实现: #include <string> #include <iostream> #include <memory> using namespace std ; class HasPtr { public: HasPtr(const std::string &s = std::string()) : ps(make_shared<string>(s)), i(0) { } HasPtr(const HasPtr& hp) : ps(hp.ps), i(hp.i) { cout << " 拷 贝 构 造 函 数 " << endl ; // 又多了一个对象使用 *ps } HasPtr& operator=(const HasPtr &rhs){ cout < 继续阅读 >>


刘生玺 18/04/08 19:25:47
1. 递归实现归并排序 基本思想: 将待排元素分成大小大致相同的2个子集,分别对2个子集合进行排序,最终将排好序的子集合合并 就会得到一个排好序的集合 即为所求 设归并排序的当前区间是R[low..high],分治法的三个步骤是: ① 分解:将当前区间一分为二,即求分裂点 ② 求解:递归地对两个子区间R[low..mid]和R[mid+1..high] 进行归并排序; ③ 组合:将已排序的两个子区间R[low..mid]和R[mid+1..high] 归并为一个有序的区间R[low..high]。 递归的终结条件:子区间长度为1(一个记录自然有序)。 2) 具体过程如下图所示: /* 数组a[]为待排序数组,数组b[]用来存放已排好序的数 left、right分别为待排序数组最左端和最右端的下标 mid为数组下标的中点 */ (算法导论版是借助两个数组,这个例子是借助了一个数组) #include<i 继续阅读 >>


陈文浩 18/04/08 19:18:18
两种类型 首先要知道Python的基本数据类型分为2种,可变以及不可变类型。 可变类型list dict set 不可变类型 number tuple string 变量访问 LEGB L-Local(function);函数内的名字空间 E-Enclosing function locals;外部嵌套函数的名字空间(例如closure) G-Global(module);函数定义所在模块(文件)的名字空间 B-Builtin(Python);Python内置模块的名字空间 当Python访问变量值时,默认LEGB查找原则,如果都找不到,则会抛出NameError 变量修改 但是,作为对变量值进行修改,则会有两种情况: 不可变变量 仅访问 a=10 def b(): print(a) #10 b() print(a) #10 可以正常访问,根据LEGB原则找到全局变量 仅修改 a=10 def b(): a = 20 print( 继续阅读 >>


李余通 18/04/08 14:39:42
1. 整体需求 使用标准库实现一个简单的文本查询系统。允许用户在一个给定的文件中查询单词。查询结果是单词在文件中出现的次数以及所在行的列表。如果一个单词在一行中出现多次,该行也只列出一次,但是出现的次数得统计在内。行序号按照升序输出。 2. 程序需要完成的功能和实现效果 需要完成的功能: 1.从文件按行读入信息,并将单词分离开来。 2.必须提取到每一个单词所出现的行号 3.行号按照升序排列且不重复 4.必须打印给定文本中的文字 5.必须统计出一个单词所出现的所有次数 实现效果: 3. 程序架构设计 <1> 因为要打印文本中所出现的文字,所以就意味着需要保存 ,那么我们选择vector<string> 来保存它,另外行号还可以作为它的下标来提取文字。 <2>使用istringstream 来分离单词 。 <3>对于每一个单词,我们使用一个multiset来保存它在文本中出现的行号 。这就自然保证了升序的特点,至于 继续阅读 >>


刘生玺 18/04/07 23:00:01
/* 切割绳子,每段绳子都有一个最大值,给定长度为n的绳子,如何切割让利益最大化 自底而上的方法,对于任何子问题,直至它依赖的所有子问题都解决,才会去解决它。 */ #include<iostream> #include<algorithm> #include<vector> using namespace std; vector<int> max_value(100,0);//当长度为n时,最大利益 vector<int> first_cut(100,0);//当长度为n时,切割一刀的位置 vector<int> price{0,1,5,8,9,10,17,17,20,24,30};//每段绳子的价值 void cut_rope(int n) { int max; max_value[0] = 0;//长度为0,值为0; for(int j = 1;j <= n;j++)//总长度 继续阅读 >>


陈文浩 18/04/07 21:03:04