notes3

1、

Android:

使用SimpleAdapter作为适配器时,支持三种类型的 View,而且是按照如下顺序进行匹配:

①.继承Checkable接口

②.TextView

③.ImageView。

2、串的模式匹配问题:

①STL算法:C语言:return A.find(B),Java:return A.indexOf(B);

②public String substring(int beginIndex,int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。

③:String.charAt(i),定位字符串第i个位置的字符

3、贪心算法的应用:奖学金问题

小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。

解题思路:

动态规划,此题用贪心算法的思维解决:先用用时较少的课程(所以需要一个排序算法,将输入的课程按照用时bi的大小进行排序,程序中使用的是冒泡排序),如果还未达到总分,继续添加下一门课程的计算。

判断是否已达到获取奖学金的分数:

while(score < need && j < n){

​ if(arr[j][0] < r){

​ time += arr[j][1];

​ arr[j][0]++;

​ score++;

​ }else{

​ j++;

​ }

​ }

按多加1分所需时间bi排序算法如下:

public static void sort(long a[][]){

​ int length = a.length;

​ for(int i = 0;i < length-1;i++){

// boolean flag = true;

​ for(int j = 0;j < length-1-i;j++){

​ if(a[j][1] > a[j+1][1]){

​ long tempA = a[j][0];

​ long tempB = a[j][1];

​ a[j][0] = a[j+1][0];

​ a[j][1] = a[j+1][1];

​ a[j+1][0] = tempA;

​ a[j+1][1] = tempB;

// flag = false;

​ }

​ }

// if(flag) return;

​ }

​ }

算法:

4、KMP算法和Floyd算法都不是贪心算法,Floyd算法使用的是动态规划,KMP算法则是对串的前缀进行去处理得到所有可能出现匹配的位置从而减少不必要的位移。

5、

6、二分查找 index = (rear + front ) / 2;

7、有个长度为12的无重复有序表,按折半查找法进行查找,在表内各元素等概率情况下,查找成功所需的平均比较(三元比较)的次数为 ,按照一颗完全二叉树来考虑,12个结点是4层,所以为(11+22+43+54)/12。

8、快速排序的worst case就是基本逆序或者基本有序的情况。

9、基本排序算法的稳定性:

首先,稳定性是指如果待排序数据中有多个相同的元素,如果在排序完后相同元素的顺序不发生改变,则为稳定的排序,否则为非稳定的排序。

A.快速排序就是利用切分算法依次确定n个元素的最终位置。所以,我们直接来分析切分算法。举例来说, 有待切分子数组: 5 8 3 7 3 9 7,切分元素为5,从后遍历得到第一个小于切分元素5的数据为3(index = 5),从前遍历得到第一个大于5的元素为8,交换3和8,这样,元素3的稳定性就被破坏了。

B.冒泡排序为依次从前往后与相邻值比较交换从而将未排序的最大值移至最后。如 9 8 6 9 0 ,当第一个9移至 8 6 9 9 0时,只要我们保证只有当前一个元素大于(而不是大于等于)下一个元素时才交换,就可保证排序的稳定性。

C.选择排序为每一次从第i个元素后面选择一个最小元素放入第i个位置.(i从0 到 n -1)。

举例 4 5 4 3,在第一轮交换中,我们找到最小元素3(index = 3),需要将其与第一个元素 4(indx = 1)。我们发现,当第i个元素和它后面的最小元素中间还存在 元素i 时将破坏元素i的稳定性。

D.归并排序同样是分治并合并两个有序子数组的过程。因此,和快速排序一样,我们只需要考察合并有序子数组的算法即可。 当合并有序子数组时,我们会利用辅助数组,每一次都将两个子数组中较小的元素放入即可辅助数组,直至全部放入。只要我们保证当遍历到当前两个子数组值相同时,先将第一个元素放入即可保证排序后的稳定性。所以,归并排序是稳定性。

文章目錄
|