习题一:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
答:首先要考虑数组是否为空等边界问题
通过右上角的元素 可以排除一列或者只剩一列元素
如果右上角的数字等于要查找的数字则查找结束
如果右上角数字大于这个个数则剔除右上角数字所在的列
如果右上角数字小于这个数则排除右上角数字所在的行
习题二:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解释:要实现这种方法 数组的总容量要大于等于改变后的数组容量
答:首先考虑字符串是否为空 数组容量是否大于等于改变容量
计算原数组实际字符串长度与空格数 则改变后数组的长度为 原数组长度+空格数*2;
定义二变量p1 p2分别指向原始数组尾部和新数组尾部 从尾向前依次拷贝 p1位置是“空格”时跳过“空格” p2位置一次传入后继续拷贝
知道p1大于等于p2
习题三:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思考过程:链表从头到尾遍历 从尾到头存入ArratList 相当于栈先入后出
答:遍历链表并将对应元素存入栈 将栈中元素一次输入ArrayList