- 博客(20)
- 收藏
- 关注
原创 剑指offer 50.第一次只出现一次的字母
第一次只出现一次的字母题目:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。哈希表代码class Solution { public char firstUniqChar(String s) { HashMap<Character, Boolean> dic = new HashMap<>(); char[] sc = s.toCharArray(); for(char c :
2021-03-14 13:34:52 196
原创 剑指 offer 52.两个链表的第一个公共节点
两个链表的第一个公共节点题目:输入两个链表,找出它们的第一个公共节点。起点相同首先计算两个链表的长度,如果不一样长,就让长的链表先走,知道链表长度相同,接下来两个链表同时移动,对比节点是否一样,相同则说明该点就是两链表的交点。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { *
2021-03-14 13:34:09 171
原创 剑指offer 42.连续子数组的最大和
连续子数组最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。动态规划刚看到这道题有点蒙,除了暴力破解也想不到其他方法。后来看了评论说可以用动态规划解决,就复习了一下之前做过的动态规划的题,最终用动态规划的思想得解。class Solution { public int maxSubArray(int[] nums) { int maxSum = 0; int temp = nums[0];
2021-03-14 13:33:46 140
原创 剑指offer 40.最小的k个数(TopK解法)
最小的k个数题目:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。排序利用Arrays.sort(arr)对数组进行排序,得到一个有小到大是数组。顺序遍历出前k个数。代码class Solution { public int[] getLeastNumbers(int[] arr, int k) { int[] res = new int[k]; Arrays.sort(
2021-03-14 13:33:27 88
原创 剑指offer 39.数组中出现次数超过一半的次数
数组中出现次数超过一半的次数题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。排序整理思路题目中说明数组中必有一个数字出现的次数超过一半,取数组长度的一半Len。首先把数组中的数字排序,则必有nums[i] = nums[i+Len],循环判断此条件是否成立,成立则输出nums[i]。代码class Solution { public int majorityElement(int[] nums) { int Len = nums.length / 2;
2021-03-14 13:32:48 103
原创 LeetCode找出数组中重复的数字
剑指offer03 找出数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。方法一:暴力破解方法二:原地置换class Solution { public int findRepeatNumber(int[] nums) { int temp; for (int i = 0;i<nums
2021-03-14 13:32:11 273
原创 剑指offer 25.合并两个排序的链表
合并两个排序的链表题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。建立伪头结点新创建一个伪头结点res,对比链表l1和l2中当前指向的值,把小的数字放入res中,依次类推直至一个链表为空,停止对比,把非空的链表全部放入res中。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListN
2021-03-14 13:31:32 65
原创 剑指offer 24.反转列表
反转列表迭代代码递归代码题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。迭代代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseL
2021-03-14 13:30:42 59
原创 剑指offer 22.链表中倒数第k个字节
文章目录链表中倒数第k个字节单指针代码双链表链表中倒数第k个字节题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。来源:力扣(LeetCode)单指针先算出链表长度n,再设置一个指针走(n-k)步,即可得解。代码/** * Definition for singly-linked list. * pub
2021-03-14 13:29:59 59
原创 剑指offer 21.调整数组顺序使奇数位于偶数前面
文章目录调整数组顺序使奇数位于偶数前面快速排序的思想代码总结其他方法总结调整数组顺序使奇数位于偶数前面题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。快速排序的思想看到这道题,我想到快速排序,同样是把数组分割成独立的两部分,第一部分是奇数,第二部分为偶数。i,j分别指向数组头和尾,指针i从第一个数开始遍历找到第一个偶数即nums[i],把这个偶数提出来赋值给temp,然后j从后遍历找到一个奇数,即nums[j],把nums[j
2021-03-09 14:18:16 72
原创 剑指offer 18.删除链表的节点
文章目录删除链表的节点逐个检查代码总结删除链表的节点题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。逐个检查本题也算是数据结构学习中的经典题目了,利用循环寻找规定的值,不相等的话后移,相等则把它排除,返回head。这里我找到第一个相等值之后就返回了,如果后面还有相同的值则不会被删去。代码/** * Definition for singly-linked list. * public class ListNode { * int
2021-03-09 14:17:45 70
原创 剑指offer 15.二进制中1的个数
文章目录二进制中1的个数二级目录三级目录二进制中1的个数题目:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。来源:力扣(LeetCode)二级目录三级目录...
2021-03-09 14:16:36 370
原创 剑指offer05.替换空挡
文章目录替换空挡法一1.代码2.总结法二1.代码2.总结替换空挡题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。在Java 语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。法一新建一个字符数组,把s中的字符依次读入字符数组,遇到空格用%20替换。1.代码class Solution { public String replaceSpace(String s) { int length = s.len
2021-03-09 14:16:01 66
原创 剑指offer 11.旋转数组的最小数字
文章目录旋转数组的最小数字简单方法代码总结二分法代码三级目录旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。来源:力扣(LeetCode)简单方法代码class Solution { public int minArray(int[] numbers) { int AL = nu
2021-03-09 14:15:22 53
原创 剑指offer 10-2 青蛙跳台阶问题(动态规划)
文章目录青蛙跳台阶问题代码总结青蛙跳台阶问题题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。来源:力扣(LeetCode)代码class Solution { public int numWays(int n) { if (n == 0||n == 1){ return 1;
2021-03-09 14:14:53 101
原创 剑指offer 10-1.斐波那契数列(初次接触动态规划)
文章目录斐波那契数列递归代码总结动态规划代码总结三级目录斐波那契数列题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。来源:力扣(LeetCod
2021-03-09 14:11:33 222 3
原创 剑指offer09 用两个栈实现队列
这里写目录标题题目代码总结题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )。来源:LeetCode代码class CQueue { LinkedList<Integer> stack1; LinkedList<Integer> stack2; public CQueue()
2021-03-09 14:10:58 165
原创 剑指offer06.从头到尾打印链表
文章目录从头到尾打印链表法一.栈1.代码2.总结从头到尾打印链表题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。法一.栈思路:从头到尾打印链表,即把链表中元素的顺序反过来,这种题型一定要想到栈,因为栈的特点是先进后出,可以将链表元素倒置。从链表头结点开始把栈中的元素依次压入栈中,完成后再从栈中依次弹出元素放在数组中。1.代码/** * Definition for singly-linked list. * public class ListNode { *
2021-03-09 14:09:07 94
原创 LeetCode二维数组中的查找
剑指offer 04 二维数组中的查找class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix == null || matrix.length == 0 || matrix[0].length==0){ return false; } int rows = matrix.length,columns
2021-03-09 14:08:01 260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人