数据结构
小白要code
这个作者很懒,什么都没留下…
展开
-
剑指offer-查找专题
首先试了下简单的双层for循环,超时。利用哈希表存储,遍历一次用contains函数查找,时间复杂度为O1,最后排序+一遍遍历,sort用的应该是快排,时间复杂度为logn。题比较简单,方法比较多,可以用哈希表记录,操作的时候最好用toCharArray()转为数组,以上代码查找字符出现的一个位置和最后一个位置,判断是否相同,其时间复杂度较高。两种方法,一是暴力,但是没有利用到递增信息,二是二分查找,时间复杂度更优,为O(logn)此题的要求应该是用二分查找解题,只需比较中间与右边的数的大小来控制区间。原创 2023-10-09 09:53:31 · 115 阅读 · 0 评论 -
剑指offer-模拟专题
出栈操作: 每次入栈后,循环判断 “栈顶元素 === 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。入栈操作: 按照压栈序列的顺序执行。设定好边界,注意细节。原创 2023-09-21 16:02:42 · 75 阅读 · 0 评论 -
剑指offer-栈与队列专题
Java 代码中,由于 Stack 中存储的是 int 的包装类 Integer ,因此需要使用 equals() 代替 == 来比较值是否相等。链表在头部插入和删除元素的操作非常高效,这正是栈的核心操作(压栈和弹栈)。因此,使用链表模拟栈能够以常数时间复杂度(O(1))执行这些操作,而不会像数组那样需要移动大量元素。链表允许栈的大小动态增长或缩小,而不需要预先分配固定大小的存储空间。使用链表模拟栈(Stack)是一种常见的数据结构设计选择,因为链表的结构特点与栈的行为非常相似。原创 2023-09-20 15:00:27 · 75 阅读 · 1 评论 -
剑指offer-双指针专题
trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉。建一个头节点,写两个指针,把小的节点连接在后即可,需要注意的是,当某个链表遍历到尾后,另一个链表可以直接加入,返回即可。利用双指针,初始化pre为null,cur为head,此时注意下删除head的头节点时的情况即可。倒数第k个节点,只需要快指针先走k-1步,然后快慢指针一起走到链表尾即可。分别遍历取快慢指针,同时前进判断即可。遍历一遍,左右双指针,奇数放左边,偶数放右边。原创 2023-09-19 18:31:19 · 37 阅读 · 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 · 21 阅读 · 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 · 24 阅读 · 0 评论 -
哈希表学习(设计哈希集合和哈希映射)
HashMap的键必须是唯一的,但值可以重复。//定义//添加键值对//获取值// 返回5//检测包含某个键// 返回false//遍历哈希表的键或值//删除键值对//清空哈希表//获取大小哈希集合(HashSet)是一种集合数据结构,它用于存储一组唯一的元素,即集合中不允许重复的元素。哈希集合的实现通常基于哈希表,这使得插入、查找和删除元素的操作非常高效。注意,哈希集合不保证元素的顺序,元素的顺序通常是不确定的。//定义//添加元素//移除元素。原创 2023-08-30 22:48:25 · 76 阅读 · 1 评论