自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 剑指offer58-II:左旋转字符串

方法一:字符串切片(时间复杂度O(N)) 返回两个拼接在一起的子字符串 public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n); } 方法二:列表遍历拼接(时间复杂度O(N)) 新建字符串列表 ,将字符串按条件添加 public String reverseLeftWords(String s, int n) {

2021-06-04 21:58:53 69

原创 剑指offer58-I:翻转单词顺序

使用双指针逆序遍历字符串,分别记录单词左右边界。一个指针寻找空格,另一个指针停留在当前单词的尾部。 时间复杂度O(N) :其中N为字符串的长度,线性遍历字符串。 public String reverseWords(String s) { s.trim(); //删除字符串首尾空格 int j = s.length() - 1; //指针指向最后一个字符 int i = j; StringBuilder res = new St...

2021-06-03 22:55:04 60

原创 剑指offer45:把数组排成最小的数

实质是排序问题: 设数组 nums[ ] 中任意两数字的字符串为 x和 y,则规定 排序判断规则 为: 若拼接字符串 x + y > y + x ,则 x“大于” y ; 反之,若 x + y< y + x ,则 x“小于” y ; x “小于” y 代表:排序完成后,数组中 x应在 y左边;“大于” 则反之。 算法流程: 初始化: 字符串列表 strsstrs ,保存各数字的字符串格式; 列表排序: 应用以上 “排序判断规则” ,对 strsstrs 执行排序; ...

2021-06-02 22:22:19 68

原创 剑指offer52:两个链表的第一个公共节点

使用双指针node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。 最后输出node1。结果要么是两个链表的公共节点,要么是null。 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

2021-06-02 18:46:48 44

原创 剑指offer24:反转链表

public ListNode reverseList(ListNode head) { ListNode pre = null; //指向null ListNode cur = head; //指向head ListNode tmp; //暂存指针 while(cur != null){ tmp = cur.next; //暂存后一节点 cur.next = pre; //修改引用指向 .

2021-05-29 17:38:51 30

原创 剑指offer22:链表中倒数第k个节点

双指针 public ListNode getKthFromEnd(ListNode head, int k) { ListNode former = head; ListNode later = head; //先将前指针移动k个单位 for(int i = 0; i < k; i++){ former = former.next; } //只要前指

2021-05-27 22:55:55 33

原创 剑指offer18:删除链表的节点

本题分为两个步骤:定位节点位置,修改前一个节点到当前节点的下一个 特例处理:当应删除头节点head时,直接返回head.next即可。

2021-05-27 17:48:43 47

原创 剑指offer53-II:0~n-1中缺失的数字

首先暴力解法思路非常简单:如果不缺失,那么数组的索引和其对应元素的值是相同的。如果不相同,则输出索引值。 注意,如果数组里面不缺失数字,则需要输出数组的下一个索引值,即nums.length。比如针对数组[0],[0,1]... public int missingNumber(int[] nums) { //限制条件 if(nums.length == 0 || nums.length > 10000){ return -

2021-05-23 15:58:12 89

原创 剑指offer53-I:在排序数组中查找数字

对于有序数组查找一个数的位置用二分查找是合适的,而它的时间复杂度正是 O(logn)。 public int search(int[] nums, int target) { //考虑限制条件 if(nums.length > 50000 || nums.length == 0){ return 0; } //二分法 int left = 0; int right = nums

2021-05-22 21:40:15 47

原创 剑指offer06:从尾到头打印链表

先Mark一下,学习过链表再来写 public int[] reversePrint(ListNode head) { //定义一个新的链表表头 ListNode node = head; //首先判断是否为空 if(head == null){ return new int[0]; } //计算链表的长度 int num = 0; while(head

2021-05-22 00:05:34 32

原创 剑指offer29:顺时针打印矩阵

根据题意,需要特判,对于空矩阵直接返回空数组。 定义出二维数组的左右上下四个边界,left、right、top、bottom; 循环打印: 沿着top,从左向右打印,top++; 沿着right,从上向下打印,right--; 沿着bottom,从右向左打印,bottom++; 沿着left,从下向上打印,left++; 注:在沿着下边界和左边界打印时,要确保left <= right,top <= bottom。 public int[] spiralOrder(int[][]

2021-05-22 00:04:47 55 1

原创 剑指offer16:数值的整数次方

递归思路: 如果n == 0,返回1; 如果n < 0,最终结果为 1/x^(-n); 如果n为奇数,最终结果为 x * x ^ (n - 1) 如果n为偶数,最终结果为 x ^ (2*(n/2)) Java中因为n的最小值可以取到Integer.MIN_VALUE,如果直接取它的相反数的话还是它自己,会导致堆栈溢出,因此提一个x出来 public double myPow(double x, int n) { if(n == 0){ retur..

2021-05-20 23:45:00 73

原创 创建动态数组与系统List对比

创建动态数组: 1.自定义接口,即想实现的方法。 public interface MyList { //添加元素 public void add(int data); //删除元素 public int remove(int index); //获取元素 public int get(int index); //获取数组长度 public int size(); //清空数组 public void clear(); //判断是否为空数组 public

2021-05-18 00:19:36 83

原创 剑指offer05:替换空格

这个题目的重点在于对字符串的访问。在java中,字符串不能被修改增加或者删除等,必须新建字符串。 class Solution { public String replaceSpace(String s) { //新建可修改的字符串 StringBuilder str = new StringBuilder(); //遍历原字符串 for(int i=0;i<s.length();i++){ //cha

2021-05-17 17:08:15 36

原创 java八种排序方法

参考文献:https://blog.csdn.net/singgel/article/details/80335658 交换排序 1.冒泡排序:首先将第一个记录的键值和第二个键值进行比较,若为逆序,即R[1].key大于R[2].key,则将这两个记录交换,然后继续比较第二个和第三个记录的键值,依此类推,直到完成第n-1个记录和第n个记录的键值比较交换为止,上述过程称为第一趟起泡,其结果使键值最大的记录移到了第n个位置上,然后再进行第二趟起泡,即对前n-1个记录进行同样的操作,其结果是次大键值的记录安置

2021-05-17 16:20:32 102

原创 剑指offer04:二维数组中的查找

2021/05/14 暴力解法没有利用到题目中矩阵“每一行都按照从左到右递增,每一列都按照从上到下递增”的特点,这不是最优解法。 解法:1. 从左下角最左边的元素[i][j]开始遍历,如果该元素比target还大,则消除该一整行的元素i--。 2. 接着比较[i]行的每一列元素[j],如果该元素比target还小,则消除该一整列的元素j++。 3. 如果有元素和target一样,则返回true。 4. 如果没有和target一样...

2021-05-14 23:25:12 40

原创 剑指offer03:数组中重复的数字

2021/05/13 方法1:一次遍历 重点:新建一个数组,将原数组的元素作为新数组的索引。如果新数组的索引出现过两次,证明是重复元素,则return 第一种(假设一定存在重复的数): class Solution { public int findRepeatNumber(int[] nums) { int temp = 0; int[] arr =new int[nums.length]; for(int i=0;i<nums.le

2021-05-13 22:15:07 38

原创 Java学习总结:类和对象,类的继承,接口/事件

1.类和对象 对象(object):任何一个具体的事物或物体。 类(class):对具有相同属性和方法的对象的抽象。类在使用时,需要定义类的属性和方法。同时,类名和文件名需保持相同。 举例:小明正在学习Java课程,学分增加了5 分,现在的学分是95分。 对象1 小明:属性:名字,学分;方法:学习 < ---------> 类1 Student 对象2 Java:属性:名字,学分;方法:无< ---------> 类2 Course 首先定义Student类:...

2021-05-08 14:59:24 424

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除