大家好,我是Nefelibat.
在博客上记录算法笔记,是因为想push自己每天坚持刷几道算法题,同时也希望能把自己总结到的经验分享给大家,希望大家阅读愉快😊
目录
一、数组
题目:不修改数组找出数组中任意一个重复的数字
思路
代码
题目:在一个二维数组中,每一行和每一列按照从上到下和从左 到右递增的顺序排序。请输入一个这样的二维数组和一个数字,并判断这个数字在数组中是否存在。
思路
代码
?二、字符串
题目:替换空格
思路
代码
题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的业余空间容纳A2,将A2中的所有数字插入A1中,并且所有的数字是排序的
思路
三、链表
链表增加节点
思路
代码
链表删除节点
思路
代码
一、数组
题目:不修改数组找出数组中任意一个重复的数字
思路
使用二分法,找出数组中中间大小的数字middele,以middle为界限,统计大于middle的数字个数和小于middle的数字个数,如果其中一个大于数组个数的一半,那么必定存在重复的数字。
代码
测试用例
题目:在一个二维数组中,每一行和每一列按照从上到下和从左 到右递增的顺序排序。请输入一个这样的二维数组和一个数字,并判断这个数字在数组中是否存在。
思路
我们应该从二维数组的哪个位置选择一个数与查找的数字比较?经过分析,我们发现,只有选择二维数组右上角或者左下角的数字才不会重复查找。如下图是查找数字7的过程。
代码
?二、字符串
题目:替换空格
考虑的问题:若在原来的字符串上替换,有可能覆盖字符串后面的内存,替换要保证内存足够
思路
先遍历字符串,求得字符串的长度,并计算有几个空格,空格数*替换字符长度+字符串的长度=替换后字符串的长度。从后往前替换。
代码
题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的业余空间容纳A2,将A2中的所有数字插入A1中,并且所有的数字是排序的
思路
在合并两个字符串,从前往后复制需要移动字符多次,从后往前复制,可以减少移动的次数。
三、链表
链表是一种动态的数据结构,在创建链表时不需要知道链表的长度。插入节点的时候,需要为节点分配新的内存。调整指针的指向来确保新节点插入到链表中,由于没有闲置的内存,链表的空间效率比数组高。
链表增加节点
思路
考虑链表是否为空,如果为空,头节点指向新节点,如果不为空,定义一个指向头节点的指针,遍历链表,直到遍历到节点指向空,然后将节点的下一个指针指向新建的节点。
代码
链表删除节点
思路
?如果头指针为空,就返回空,新建一个将要被删除的指针为空,如果头节点的值为删除节点的值,将删除指针指向头结点,头节点往下移动一个位置。如果要删除的节点不是头结点,新建一个指向头结点的指针,while指针的下一个值不为要删除的值,遍历到最后一个节点,如果找到,将待删除的节点的指针指向新建的节点的下一个值,新建节点的下一个值为新建节点的下一个值的下一个值。最后,如果待删除节点指针不为空格,就delete和这个节点,将待删除节点置为空。
代码
|