begin

分页之页面页码列表计算

懵懂的女人 提交于 2020-02-02 13:43:06
分页之页面页码列表计算 我们通过看百度的分页可以发现以下规律: 1.最多显示10个页码; 2.当前页在页码中的位置定为六; 所以只需要当前页码来定出来页码列表,定下来页码列表只需要两个数据:begin,end; 需要使用pc(当前页码)来推算出begin和end: begin=pc-5; end=pc+4; 计算公式:   如果总页数<=10(列表长度),那么begin=1,end=10;否则使用计算公式:begin=pc-5以及end=pc+4;但是这样也会导致头溢出和尾溢出。 头溢出:当begin<1时,让begin=1,end=10; 尾溢出:当end=${tp(总页数)}时,让end=tp; 代码实现: 1.首先要创建一个pagebean: package pages; import java.util.List; public class PageBean<T> { private int pc;//当前页码page code // private int tp;//总页数=总记录数/每页记录数 private int tr;//总记录数 private int ps;//每页记录数 private List<T> beanlist;//当前页的记录 public int getPc() { return pc; } public void setPc(int pc) {

dtoi4694 rng

别来无恙 提交于 2020-02-02 01:11:43
题意: 有一个长度为n的序列a,a[i]在[li,ri]中独立均匀随机生成。求期望的逆序对个数。 题解: 显然由于独立生成,所以可以每对逆序对单独考虑。 我们将每一块[i,i+1](i∈Z)的区间称之为“第i块”。那么假设a[i]有pi的概率选到第x块,a[j]有pj的概率选到第y块(i<j,x>y),那么贡献就是pi*pj。如果是x<y,贡献显然为0,如果x=y,那么贡献为1/2*pi*pj。这样我们可以得到O(n^2)的做法。 当然这样不够快,我们可以分开考虑x>y和x=y的贡献。 由于是均匀随机的,所以每一个块的概率是一定的。那么我们用一个线段树来表示分到第i块的概率总和,那么就可以解决x=y的贡献,就是1/2*pi*sum,sum表示从第l[i]块到第r[i]-1块的概率总和(线段树维护)。 x>y不太好弄,如果我们对于i,找所有的块来贡献答案,并不能做,因为系数不一样。那我们倒过来考虑,对于i,它能对前面哪些块造成多大的贡献。计算一下,第l[i]块贡献为0,第l[i]+1块贡献为pi,第l[i]+2块贡献为2*pi,这恰好是一个等差数列!我们可以使用线段树维护等差数列,然后即可解决这道题目。 如果不知道怎么线段树维护等差数列的,可以看一看下面这一段文字(会就不用看了) 如果我们要插入一段l,r的区间,公差为a的等差数列,那么第i个位置的值就为a*(i-l)(本题首项为0)

快速排序的注意事项

非 Y 不嫁゛ 提交于 2020-02-01 15:16:02
template<class Iter> void quick_sort(Iter begin, Iter end) { int sz = (int)distance(begin, end); if (sz < 2) return; //保存现场; Iter b = begin ; Iter e = end; int tmp = *begin; while (b < e) { while (*--e > tmp); while (b < e && *++b < tmp); if (b < e) iter_swap(b, e); } iter_swap(begin, e); quick_sort(begin, e); quick_sort(e + 1, end); } 第一,等于的时候进不进行交换。 需要进行交换,理由就是尽量使得被target被交换到数组的中央; 问题就出现了,如何保证等于的时候,不会发生死循环; 第二,从头遍历还是从后遍历。 从后遍历,因为第一点等于的时候也要进行交换,所以向后遍历最差情况也只是到第一个元素的时候停止,此时遍历的过程中是不需要加上while(i < j)的判断的; 第三,循环外与begin交换的是b,还是e。 这里是e,注意主要经过while (b < e)循环,e最后的位置一定保证是*begin最终的位置。 第四,可以将第三个while的b <

27、剑指offer--字符串的排列

萝らか妹 提交于 2020-02-01 06:27:48
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 解题思路:本题求整个字符串的全排列可以看做两步 1)首先求出所有可能出现在第一位置的字母,即begin与后面所有与它不同的字母进行交换 2)固定第一个字母,求后面字母的全排列,即递归此时begin = begin+1 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 class Solution { 7 public: 8 vector<string> Permutation(string str) { 9 vector<string> a; 10 if(str.empty()) 11 return a; 12 Permutation(a,str,0); 13 sort(a.begin(),a.end());//按照字典序输出 14 return a; 15 } 16 void Permutation(vector<string> &array,

剑指offer-字符串的排列26

纵饮孤独 提交于 2020-02-01 05:23:01
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 class Solution: def __init__(self): self.res=[] def PermutionCore(self,ss,begin): if begin==len(ss): self.res.append(ss) return for i in range(begin,len(ss)): if i != begin and ss[i]==ss[begin]: continue str_list=list(ss) str_list[i],str_list[begin]=str_list[begin],str_list[i] ss=''.join(str_list) self.PermutionCore(ss,begin+1) def Permutation(self, ss): # write code here if len(ss)==0: return [] self.PermutionCore(ss,0) self.res.sort() return self.res 来源:

复制动态数组

好久不见. 提交于 2020-01-31 19:17:10
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} type TArr = array of Int64; {先把需要的动态数组数组定义成一个类型, 因为下面需要类型转换} var arr1,arr2: TArr; {两个等待测试的数组变量} p: Pointer; {该指针用于中转数组中的数据} {先给第一个数组赋测试值} procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to 1000 - 1 do begin SetLength(arr1, Length(arr1)+1); arr1[High(arr1)] := i * 2; end;

Power up C++ with the Standard Template Library: Part I[翻译]

隐身守侯 提交于 2020-01-31 12:39:35
Power up C++ with the Standard Template Library: Part I 【原文见: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary 】 作者 By DmitryKorolev Topcoder 成员 翻译 农夫三拳@seu Containers Before we begin Vector Pairs Iterators Compiling STL Programs Data manipulation in Vector String Set Map Notice on Map and Set More on algorithms String Streams Summary 也许你已经使用C++作为主要编程语言来解决Topcoder中的问题了,这就意味着你已经在简单的使用 STL了,因为数组和字符串都是以STL对象的方式传入到你的函数中的。也许你已经注意到了,有许多 程序员他们写代码要比你快并且代码也比你的简洁。 也许你不是一个C++程序员,但是因为C++的强大功能以及它的库(或者因为你在Topcoder practice 房间和比赛里面看到的简短的解决方案),你想成为一个这样的程序员。 不管你来自哪里,这篇文章将会帮助你掌握它

LeetCode(15)题解--3Sum

馋奶兔 提交于 2020-01-31 04:56:01
https://leetcode.com/problems/3sum/ 题目: Given an array S of n integers, are there elements a , b , c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet ( a , b , c ) must be in non-descending order. (ie, a ≤ b ≤ c ) The solution set must not contain duplicate triplets. For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2) 方法一: 两层循环+二分查找,复杂度O(n^2 logn). 太慢了 1 class Solution { 2 public: 3 vector<vector<int>> threeSum(vector<int>& nums) { 4 set<vector<int>> res; 5 vector<vector<int>>

c++中vector容器的功能及应用。

青春壹個敷衍的年華 提交于 2020-01-31 01:48:15
vector基本操作:   1.头文件 #include<vector>。 注:一定要加上using namespace std;   2.vector对象的创建: vector<int/char/string/基本数据类型/自定义类型/结构体类型/.....>vec ; (以下以int类型为例)   3.vector对象尾部插入数据: vec.push_back(a); 注意: vector对象的下标从0开始!!!!!   4.vector对象尾部删除数据: vec.pop_back(a);   5.vector中定位函数: vec.at(i); //相当于vec[i];   6.vector中第一个元素的指针: vec.begin();   7.vector中 最后一个元素 +1 的指针:vec.end();   8.vector中得到第一个元素的值: vec.front();   9.vector中得到最后一个元素的值: vec.back();   10.判断vector是否为空: vec.empty();   11.交换vector两个容器的值: vector<int>a.swap(vec);   12.vector对象的访问:vec[0],vec[1],vec[2]..............   使用迭代器访问vector中的元素           vector

js渐变颜色、背景、边框

孤者浪人 提交于 2020-01-31 01:00:07
我的闪烁文字 abc123 我的闪烁文字 abc123 边框 代码: <div id="div1">我的闪烁文字 abc123</div><div id="div2">我的闪烁文字 abc123</div><div id="div3" style="height:200px; width:200px; border:solid 5px black;">边框</div><script type="text/javascript">function blink(strId, strEnd, strBegin, speed, styleName){ strBegin = strBegin || '#000000'; speed = speed || 100; styleName = styleName || 'color'; //获取当前颜色分量值 var getCur = function(beginValue, endValue, curValue, bo, rateValue) { if(beginValue == endValue) { return beginValue; } rateValue = beginValue < endValue ? rateValue : -rateValue; curValue += bo ? rateValue : -rateValue; /