螺旋矩阵java代码 螺旋矩阵java实现( 三 )


break;
case 2:
for (int r = r0 ; r = r1 ; ++r)
{
Array[r][c1] = tempStartNum;
++tempStartNum;
}
fangxiang = 3;
c1--;
break;
case 3:
for (int c = c1 ; c = c0 ; --c)
{
Array[r1][c] = tempStartNum;
++tempStartNum;
}
fangxiang = 4;
r1--;
break;
case 4:
for (int r = r1 ; r = r0 ; --r)
{
Array[r][c0] = tempStartNum;
++tempStartNum;
}
fangxiang = 1;
c0++;
break;
default:
break;
}
}
int main(int argc, char** argv)
{
int StartNum;
int Row;
int Col;
cout"输入起始数 长度 宽度(如: 3 6 8): "endl;
cinStartNumRowCol;
int** Array = (int**)malloc(sizeof(int*)*Row);
for (int i = 0 ; iRow ; ++i)
{
Array[i] = (int*)malloc(sizeof(int)*Col);
}
for (int i = 0 ; iRow ; ++i)
{
for (int j = 0 ; jCol ; ++j)
{
Array[i][j] = 0;
}
}
int fangxiang= 1;
int r0,r1,c0,c1;
r0 = 0;
r1 = Row - 1;
c0 = 0;
c1 = Col - 1;
while (!(r0r1 || c0c1))
{
Generate(Array, r0, r1, c0, c1, fangxiang, StartNum);
}
for (int i = 0 ; iRow ; ++i)
{
for (int j = 0 ; jCol ; ++j)
{
coutArray[i][j]"";
}
coutendl;
}
return 0;
}
耗时7天我终于把LeetCode刷通关:数组十七连,真是不简单大家好,我是老三,一个刷题困难户,接下来我们开始数组类型算法的刷题之旅!
数组
数组基本上是我们最熟悉的数据结构了,刚会写“Hello World”不久,接着就是“杨辉三角”之类的练习 。
数组结构
上图是一个字符数组的例子 。
因为内存空间连续,所以可以直接通过下标获取对应的元素 。
但是删除就麻烦一点,相当于填坑 , 一个元素被移走,留下的坑,需要其它元素来填上 。
删除元素
在Java中 , 多维数组的存储本质上也是一个行优先的一维数组 。
我们都知道,在Java中的 “=” 用在基本数据类型上,是值传递 , 用在引用数据类型上,是引用传递 。
这一块展开可以写一篇文章 , 我们只简单看个例子:
大家可以看到,newArray改变了,array也跟着变了 。
为什么呢?
在Java中,数组是引用数组类型 。array、newArray都是存储在栈中的引用 , 它们指向堆中真正存储的数组对象 。
所以改变了newArray,实际是改变了newArray指向的数组 。
数组引用传递
这一点是我们刷题需要注意的,复制数组需要在循环中一个个复制 。
题目:704. 二分查找 ()
难度:简单
描述:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1 。
题目示例
思路:
二分查找可以说我们都很熟了 。
因为数组是有序的,所以定义三个指针,low、high、mid,每次与中间指针指向的元素nums[mid]比较,
二分查找
但是这个代码还有一处问题,在哪呢?
int mid = (left + right) / 2;
这个地方可能会因为left和right数值太大导致内存溢出,所以应该写为int mid = left + ((right - left)1);
修改之后代码如下:
时间复杂度:O(logn)
题目:35. 搜索插入位置 ()
难度:简单
描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引 。如果目标值不存在于数组中 , 返回它将会被按顺序插入的位置 。

推荐阅读