文章目录
1.Algorithm
1.1 最大子序和
1.1.1 解法一 动态规划?
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
当temp为正,并且下一个元素也为正时,相加才能变大
否则下一个元素自己就可能是最大的
如果trmp为负时,子串就断了,期望从下一个元素重新开始
class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0];
int temp = 0;
for (int i = 0; i < nums.length; i ++ ){
temp += nums[i];
if(temp > max)
max = temp;
if(temp < 0)
temp = 0;
}
return max;
}
}
数组 | -2 | 1 | -3 | 4 | -1 | 2 | 1 | -5 | 4 |
---|---|---|---|---|---|---|---|---|---|
temp += nums[i] | -2 | 1 | -2 | 4 | 3 | 5 | 6 | -1 | 4 |
max | -2 | 1 | 1 | 4 | 4 | 5 | 6 | 6 | 6 |
temp | 0 | 1 | 0 | 4 | 3 | 5 | 6 | 0 | 4 |
1.1.2 解法二 分治法?
2.Review
3.Tip
3.1 JavaScript 对象枚举
var base = {base:0}
var obj = {
aa: 1,
bb: 2,
cc: function() {
console.log("function")
}
};
obj.__proto__ = base
for/in
循环:枚举所有可枚举的自由属性和继承属性还有自定义方法;(在IE中会遍历出一个undefined,所以不要再IE中使用该枚举方案,可以使用jQuery的$.each()遍历)
for (key in obj) {
console.log(key);
}
//aa
//bb
//cc
//base
Object.keys(XX)
:输出自有属性数组
Object.keys(obj)
//输出:["aa", "bb", "cc"]
Object.getOwnPropertyNames(obj)
只枚举自有属性
Object.getOwnPropertyNames(obj)
//["aa", "bb", "cc"]
4.Share
4.1 C# 下载zip文件
注意:不能使用ajax请求下载,ajax和response不匹配
另一个方案:
可以不在磁盘上创建zip文件,而是使用MemoryStream来代替,但是response的类型不能是Response.TransmitFile(zipPath);应该是输出流;
读写顺序:
定义File对象
定义流,需要File对象作为参数:输入流用来读取;输出流用来输出,本例是输出到.zip文件,所以定义ZipOutputStream
读取/写入数据
释放资源
定义输入流对象:从远处服务器获取文件流,这个是输入流对象,输入流对象的Read方法可以读取数据
Stream fileStream = client.OpenRead(F_UP_URL + "?id=" + form["FORM_ID"]);
定义输出流对象:MemoryStream(可以单独使用,也可以转为其它流)和bufferedStream(必须和其它流结合使用)都是缓存流
ZipOutputStream zosStream = new ZipOutputStream(System.IO.File.Create(zipPath));
//MemoryStream
ZipOutputStream zosStream = new ZipOutputStream(MemoryStream);
文件写入.zip
//定义 文件在zip中的位置 a/b/c.pdf
ZipEntry entry = new ZipEntry(item.Key + "/" + train["TRAIN_NAME"] + "/" + form["FORM_NAME"] + ".pdf");
entry.DateTime = DateTime.Now;
zosStream.PutNextEntry(entry);
//读取数据到buffer...
//写入即可
zosStream.Write(buffer, 0, len);
通知浏览器下载:
//下载压缩
Response.ContentType = "application/x-zip-compressed";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.TransmitFile(zipPath);
Response.Flush();
Response.End();
完整代码:
public void downForm(string behaviorname, string beparameters, string getFormListBehavior)
{
WebClient client = new WebClient();
beparameters = HttpUtility.UrlDecode(beparameters);
//所有飞行员=》该飞行员的训练=》该训练下的表单
IList<IDictionary<string, string>> list = CommonHelper.LoadForDic(behaviorname, beparameters);
var hridTrain = list.GroupBy(r => string.Format("{0}-{1}", r["HRID"], r["USER_NAME"]));
//创建本次下载的压缩文件夹
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip";
string zipPath = Server.MapPath("~/Files/" + fileName);
ZipOutputStream zosStream = new ZipOutputStream(System.IO.File.Create(zipPath));
zosStream.SetLevel(6);
try
{
//遍历所有 飞行员
foreach (var item in hridTrain)
{
//遍历 该飞行员下的所有训练
foreach (var train in item)
{
//获取该训练下的所有表单
IList<IDictionary<string, string>> formList = CommonHelper.LoadForDic(getFormListBehavior, JsonHelper.ObjectToJson(train));
foreach (var form in formList)
{
Stream fileStream;
try
{
fileStream = client.OpenRead(F_UP_URL + "?id=" + form["FORM_ID"]);
}
catch
{
//找不到文件跳过
continue;
}
finally
{
client.Dispose();
}
ZipEntry entry = new ZipEntry(item.Key + "/" + train["TRAIN_NAME"] + "/" + form["FORM_NAME"] + ".pdf");
entry.DateTime = DateTime.Now;
zosStream.PutNextEntry(entry);
try
{
int len = 0;
byte[] buffer = new byte[4096];
// ch数组,每次读一个字符,覆盖ch的一个元素,ch中可能有上次读到的数据
// fieStream.Read(buffer) 将内容读取到buffer中
while ((len = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
//将buffer中的内容写到文件中
zosStream.Write(buffer, 0, len);
}
}
finally
{
fileStream.Close();
}
}
}
}
}
finally
{
zosStream.Finish();
zosStream.Close();
}
try
{
//下载压缩
Response.ContentType = "application/x-zip-compressed";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.TransmitFile(zipPath);
Response.Flush();
Response.End();
}
finally
{
System.IO.File.Delete(zipPath);
}
}