算法编程题

1.行列递增矩阵的查找

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

#define ROW 4
#define COL 4
bool 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(var1)
{
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.将单链表放入栈中,利用栈的先进后出

你可能感兴趣的:(算法编程题)