sum

避免创建不必要的对象

假如想象 提交于 2020-03-24 06:30:35
避免创建不必要的对象 在每次需要时重用一个对象而不是创建一个新的相同功能对象通常是恰当的。重用可以更快更流 行。如果对象是不可变的(详见第 17 条),它总是可以被重用。 作为一个不应该这样做的极端例子,请考虑以下语句: ​ x String s = new String("bikini"); 语句每次执行时都会创建一个新的 String 实例,而这些对象的创建都不是必需的。String 构造方法 ("bikini") 的参数本身就是一个 bikini 实例,它与构造方法创建的所有对象的功能相同。如果 这种用法发生在循环中,或者在频繁调用的方法中,就会毫无必要地创建数百万个 String 实例。 改进后的版本如下 xxxxxxxxxx String s = "bikini"; 通过使用静态工厂方法(详见第 1 条)和构造器,可以避免创建不需要的对象。例如,工厂方法 Boolean.valueOf(String) 比构造方法 Boolean(String) 更可取,后者在 Java 9 中被弃用。构 造方法每次调用时都必须创建一个新对象,而工厂方法永远不需要这样做,在实践中也不需要。除了重 用不可变对象,如果知道它们不会被修改,还可以重用可变对象。 假设你想写一个方法来确定一个字符串是否是一个有效的罗马数字。 以下是使用正则表达式完成此操作时最简单方 法: xxxxxxxxxx //

母牛繁殖问题

流过昼夜 提交于 2020-03-22 17:57:11
母牛的故事 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第 n 年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数 n(0<n<55) , n 的含义如题目中描述。 n=0 表示输入数据的结束,不做处理。 Output 对于每个测试实例,输出在第 n 年的时候母牛的数量。 每个输出占一行。 Sample Input 2 4 5 0 Sample Output 2 4 6 方法一: 运用递归方法: f(n)=f(n-1)+f(n-3) 递归就是把一个复杂的问题,分解成能用同一种方法解决的若干个小问题。 1 #include <iostream> 2 3 using namespace std; 4 5 int sum(int n)    //sum(n)表示第n年年初(第n年的母牛还没出生)母牛的数量 6 { 7 if (n <= 4) 8 return n; 9 return sum(n-3)+sum(n-1); //sum(n-3)表示3年前的母牛数量,这些母牛在第n-1年都能繁殖一倍 10                     //sum(n-1)表示前一年年初的母牛数量 11                    //所以第n-1年年初的母牛+在第n-1年出生的母牛 =

JavaScript中的Function类型浅析

时光总嘲笑我的痴心妄想 提交于 2020-03-21 22:07:04
1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法。正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针。 2. 常用的函数定义方式 1. 函数声明: function sum(a , b ){ return a+b; } 2. 表达式: var sum = function(){ return a+b; }; //注意分号 //两种方式的区别: //解释器会率先读取函数声明,并使其在执行之前可以访问,而使用表达式则必须等到解析器执行到它所在的代码行,才会真正被解释执行(变量声明提前,而值留在原地)alert (sum (10 ,10));function sum(a ,b){  return a+b;}//↑上面的代码会正常执行,因为在代码执行前,解析器通过函数声明提升,读取并将函数声明添加到执行环境中,放到代码树的顶部 alert (typeof sum);alert(sum(10 , 10));var sum = function (a ,b){  return a+b;}//↑报错,原因在于函数位于一个初始化语句中,不是一个函数声明,不会被提前,而只会把var sum提前,用typeof操作符显示sum是undefined,所以报错 3. 函数名仅仅保存指向函数对象的指针

python序列(七)序列操作的常用内置函数

ⅰ亾dé卋堺 提交于 2020-03-21 18:36:28
1.len(列表):返回:列表中的元素个数,同样适用于元组、字典、集合、字符串等。   max(列表)、min(列表):返回列表中的最大或最小元素同样适用于元组、字典、集合、range对象等。   sum(列表):对列表的元素进行求和运算,对非数值型列表运算需要指定start参数,同样适用于元组、range。 >>> sum(range(1,11))    #sum()函数的start参数默认为0 55 >>> sum(range(1,11),5)   #指定start参数为5 60>>> sum([[1,2],[3],[4]],[])#这个操作占用空间较大,慎用 [1, 2, 3, 4] 2.zip()函数返回可迭代的zip对象   zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。   如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。 >>> alist = [1,2,3] >>> blist = [4,5,6] >>> clist =zip(alist,blist)  #返回zip对象 >>> clist <zip object at 0x00000216BC8428C0> >>> list(clist)          #把zip对象转换成列表 [(1, 4),

[Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)

笑着哭i 提交于 2020-03-21 05:25:23
[Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列) 题面 两个人玩游戏,共进行t轮,每人每轮从[-k,k]中选出一个数字,将其加到自己的总分中。已知两人的初始得分分别为a和b,求第一个人最后获胜的方案数。两种方案被认为是不同的,当且仅当存在其中一轮,其中一人选到的数字不同。a, b, t≤100,k≤1000 分析 两个人的操作是独立的,设 \(dp1[i][j]\) 表示第1个人玩i轮得到j分的方案数,第2个人同理 则有 \(dp1[0][a]=0\) ​ \(dp1[i][j]=\sum _{u=j-k}^{j+k} dp1[i-1][u]\) 第2个人只需要把dp的初始值改成 \(dp2[0][b]=0\) 即可。这样的空间复杂度是 \(O(kt^2)\) ,时间复杂度是 \(O(k^2t^2)\) ,考虑优化。 首先可以用滚动数组,这样空间复杂度就变成了 \(O(kt)\) 注意到 \(u \in [j-k,j+k]\) ,可以用前缀和优化,定义 \(sum1[i][j] = \sum_{u=-maxv}^{maxv} sum1[i][u]\) ,则dp方程可以改写成 \(dp1[i][j]=sum[i-1][j+k]-sum[i-1][j+k-1]\) .时间复杂度 \(O(kt^2)\) ,对于dp2我们同理维护

Cuda - Multiple sums in each vector element

拈花ヽ惹草 提交于 2020-03-20 12:01:08
问题 The product of two series of Chebyshev polynomials with coefficient a and b can be represented by the formula The problem is to parallelize this as much as possible. I have managed to use cuda to parallelize the formula above by simply applying one thread per vector element. Thus one thread performs the sums/multiplications. #include <stdio.h> #include <iostream> #include <cuda.h> #include <time.h> __global__ void chebyprod(int n, float *a, float *b, float *c){ int i = blockIdx.x *blockDim.x

Cuda - Multiple sums in each vector element

佐手、 提交于 2020-03-20 11:58:42
问题 The product of two series of Chebyshev polynomials with coefficient a and b can be represented by the formula The problem is to parallelize this as much as possible. I have managed to use cuda to parallelize the formula above by simply applying one thread per vector element. Thus one thread performs the sums/multiplications. #include <stdio.h> #include <iostream> #include <cuda.h> #include <time.h> __global__ void chebyprod(int n, float *a, float *b, float *c){ int i = blockIdx.x *blockDim.x

洛谷P1220 关路灯

扶醉桌前 提交于 2020-03-19 21:42:16
P1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。 为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些。 现在已知老张走的速度为1m/s,每个路灯的位置(是一个整数,即距路线起点的距离,单位:m)、功率(W),老张关灯所用的时间很短而可以忽略不计。 请你为老张编一程序来安排关灯的顺序,使从老张开始关灯时刻算起所有灯消耗电最少(灯关掉后便不再消耗电了)。 输入输出格式 输入格式: 文件第一行是两个数字n(0<n<50,表示路灯的总数)和c(1<=c<=n老张所处位置的路灯号); 接下来n行,每行两个数据,表示第1盏到第n盏路灯的位置和功率。 输出格式: 一个数据,即最少的功耗(单位:J,1J=1W·s)。 输入输出样例 输入样例#1: 5 3 2 10 3 20 5 20 6 30 8 10 输出样例#1:

第二次实验报告

China☆狼群 提交于 2020-03-18 21:57:35
第二次实验报告 C语言设计实验报告 姓名: 周萌 实验地点: 514教室 实验日期: 4月3日 实验项目 ◆if语句的应用 ◆switch/case语句的应用 ◆ switch/case语句嵌套if语句的应用 ◆ switch/case结构的嵌套应用 ◆分析程序 一、实验目的 1、实验4.3.1 ◉掌握C语言逻辑运算和关系运算的规则; ◉学会正确地使用关系表达式和逻辑表达式; ◉掌握if-else语句的使用方法。 2、实验4.3.2 ◉掌握算数运算符和运算规则; ◉掌握switch/case语句的使用方法。 3、实验4.3.3 ◉ 学会正确地使用关系表达式和逻辑表达式; ◉掌握switch/case语句语法和使用方法。注意switch语句的控制流程,在switch语句中break语句的用法。 4、实验4.3.4 ◉switch/case结构的嵌套使用。 ◉break语句与continue语句的用法。 5、4.3.5-分析程序 ◉运行程序,分析输出的结果; ◉运行程序,分析错误的原因,修改程序使其输出正确的结果; ◉掌握C语言表达式与数学表达式的区别。 二、实验内容 实验4.3.1 ◆问题的描述:读入3个分别表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。 ◆实验代码; 1 #include<stdio.h> 2 int main(){ 3 int l,w,h; 4

Kingdom of Black and White(模拟)

◇◆丶佛笑我妖孽 提交于 2020-03-18 05:00:12
http://acm.hdu.edu.cn/showproblem.php?pid=5583 题意: 给你一个只含有01的字符串,然后这个串的权值就是每一段连续的0或1的长度的平方和,然后你可以修改一个数,使得这个数变成0,或者使这个数变成1 然后问你最大权值能为多少。 解法:暴力枚举改变每一个联通块,注意当联通块值为1时,需合并3块联通块。 #include<bits/stdc++.h> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <string> #include <stdio.h> #include <queue> #include <stack> #include <map> #include <set> #include <string.h> #include <vector> using namespace std; typedef long long ll ; #define int ll #define mod 1000000007 #define gcd(m,n) __gcd(m, n) #define rep(i , j , n) for(int i = j ; i <= n ; i++)