算法编程题

来源:互联网 发布:淘宝装修助手 编辑:程序博客网 时间:2024/05/28 22:13

1.行列递增矩阵的查找

在一个二维数组中,每一行每一列都是按照从左到右的递增顺序。现输入一个二维数组和一个整数,判断这个数是否在这个数组中。
分析:这种行和列的矩阵分别递增,叫杨氏矩阵。
解法一:分治法
因为行和列都是递增,所以对角线上也是递增的,了在对角线上进行二分查找,若要找的数介于对角线上下两个数之间,则可排除左上和右下两个矩阵,而在左下和右上查找。
解法二:定位法
首先直接定位到矩阵最右上角的元素,如果这个元素比要找的数大,则往左走,比要找的数小,则往下走,直到找到这个数。复杂度为O(m+n)

#define ROW 4#define COL 4bool YoungMatrix(int array[][CLO],int searchKey){int i=0;j=CLO-1;//j定位矩阵最右上角的元素int var=array[i][j]while(true){if(var==searchKey){return true;}else if(var<searchKey&&i<ROW-1){var=array[++i][j];//向下走}else if(var>searchKey&&j>0){var=array[i][--j]}return true;}}}

巧妙的运用定位法,每次都寻找最右上方的数,直到找到特定元素。

链表反转–基本题

1.用三个指针逐个连接点进行反转

Node * ReverseList(Node *head)//返回的还是一个链表{Node *p1,*p2,*p3;if(head==null||*head==null)//先排除异常输入  return head;p1=head;p2=p1->next;while(p2)//指针遍历,逐个反转{  p3=p2->next;  p2->next=p1;  p1=p2;  p2=p3;}}

2.将单链表储存为数组,然后按照数组的索引逆序进行反转
3.将单链表放入栈中,利用栈的先进后出

0 0