
数据结构与算法
数据结构与算法学习
小白要code
这个作者很懒,什么都没留下…
展开
-
【算法题】小红的区间翻转
想了一下不用纯暴力了,先找到左右两个数组不相同的地方,再遍历,这样存在一个问题,回文区间左右两个数相同时,同样也是一个方案,因此加上左右的情况。验证翻转的函数是这样写的,先克隆,再翻转对应区间,最后用equals判断。后来考虑到可能是验证翻转函数的问题,改为原地判断,提前返回。第一个想法就是写一个验证翻转的函数,然后暴力遍历两遍。结论:时间是短了,可是还是超时。原创 2024-07-12 16:24:08 · 411 阅读 · 0 评论 -
【经典算法题】两数之和
两层for循环,O(n*n)原创 2024-07-03 09:30:36 · 162 阅读 · 0 评论 -
剑指offer-查找专题
首先试了下简单的双层for循环,超时。利用哈希表存储,遍历一次用contains函数查找,时间复杂度为O1,最后排序+一遍遍历,sort用的应该是快排,时间复杂度为logn。题比较简单,方法比较多,可以用哈希表记录,操作的时候最好用toCharArray()转为数组,以上代码查找字符出现的一个位置和最后一个位置,判断是否相同,其时间复杂度较高。两种方法,一是暴力,但是没有利用到递增信息,二是二分查找,时间复杂度更优,为O(logn)此题的要求应该是用二分查找解题,只需比较中间与右边的数的大小来控制区间。原创 2023-10-09 09:53:31 · 241 阅读 · 0 评论 -
剑指offer-模拟专题
出栈操作: 每次入栈后,循环判断 “栈顶元素 === 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。入栈操作: 按照压栈序列的顺序执行。设定好边界,注意细节。原创 2023-09-21 16:02:42 · 128 阅读 · 0 评论 -
剑指offer-栈与队列专题
Java 代码中,由于 Stack 中存储的是 int 的包装类 Integer ,因此需要使用 equals() 代替 == 来比较值是否相等。链表在头部插入和删除元素的操作非常高效,这正是栈的核心操作(压栈和弹栈)。因此,使用链表模拟栈能够以常数时间复杂度(O(1))执行这些操作,而不会像数组那样需要移动大量元素。链表允许栈的大小动态增长或缩小,而不需要预先分配固定大小的存储空间。使用链表模拟栈(Stack)是一种常见的数据结构设计选择,因为链表的结构特点与栈的行为非常相似。原创 2023-09-20 15:00:27 · 147 阅读 · 1 评论 -
剑指offer-双指针专题
trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉。建一个头节点,写两个指针,把小的节点连接在后即可,需要注意的是,当某个链表遍历到尾后,另一个链表可以直接加入,返回即可。利用双指针,初始化pre为null,cur为head,此时注意下删除head的头节点时的情况即可。倒数第k个节点,只需要快指针先走k-1步,然后快慢指针一起走到链表尾即可。分别遍历取快慢指针,同时前进判断即可。遍历一遍,左右双指针,奇数放左边,偶数放右边。原创 2023-09-19 18:31:19 · 76 阅读 · 0 评论 -
剑指offer-链表专题
剑指offer-链表专题06.从尾到头打印链表** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { ArrayList<Integer> tmp=new ArrayList<Integer>(原创 2023-09-18 21:25:51 · 73 阅读 · 0 评论 -
剑指offer-字符串专题
的含义:就是将数组array中 索引值从0开始 长度为index 的部分截取出来然后建立一个新的字符串newStr。利用自动机解题思路很清晰,但是代码写的复杂,值得注意的是:1.可以直接使用Character.isDigit()函数判断是否为数字;(-1)会发生溢出,可以写成ans>-(long)Integer.MIN_VALUE 或 ans*sign<Integer.MIN_VALUE。空格替换为三个字符,长度不对等,转化为数组进行判断,最后数组转化为字符串。原创 2023-09-12 16:04:44 · 82 阅读 · 0 评论 -
动态规划基础模型学习
思路:假设n个节点存在二叉排序树的个数是G(n),1为根节点,2为根节点,…,n为根节点,当1为根节点时,其左子树节点个数为0,右子树节点个数为n-1,同理当2为根节点时,其左子树节点个数为1,右子树节点为n-2,所以可得G(n) = G(0)G(n-1)+G(1)(n-2)+…+G(n-1)*G(0)原创 2023-09-08 18:59:05 · 133 阅读 · 1 评论 -
哈希表学习(设计哈希集合和哈希映射)
HashMap的键必须是唯一的,但值可以重复。//定义//添加键值对//获取值// 返回5//检测包含某个键// 返回false//遍历哈希表的键或值//删除键值对//清空哈希表//获取大小哈希集合(HashSet)是一种集合数据结构,它用于存储一组唯一的元素,即集合中不允许重复的元素。哈希集合的实现通常基于哈希表,这使得插入、查找和删除元素的操作非常高效。注意,哈希集合不保证元素的顺序,元素的顺序通常是不确定的。//定义//添加元素//移除元素。原创 2023-08-30 22:48:25 · 175 阅读 · 1 评论 -
贪心算法(分发饼干、无重叠区间、买卖股票的最佳时机)
记录并学习贪心策略。原创 2023-08-29 21:51:52 · 111 阅读 · 1 评论