剑指offer/leetCode
CSU_Dennis
博主2019年6月毕业于中南大学计算机院
展开
-
LeetCode【70】ClimbingStairs
package Leetcode.easy;/** * 典型的斐波那契数列 * @author Dennis * @date 2019/7/24 10:06 */public class Problem70ClimbingStairs { public int climbStairs(int n) { int one = 1; int two...原创 2019-07-24 10:08:27 · 117 阅读 · 0 评论 -
剑指offer 29 数组中出现次数超过一半的数字
package offer;/** * 面试题29:数组中出现次数超过一半的数字 * 思路:1、可以排序然后找到中位数(O(nlogn)) * 2、重复的数字出现的次数比其他所有数字出现的次数的和还要多,则在遍历数组的时候保存两个值,一个是数组中的 * 数字,一个是次数,如果下个数字和保存的数字相同,则次数+1,不同则-1,如果次数为0,则保存下个数字 * ...原创 2018-06-28 10:29:18 · 257 阅读 · 1 评论 -
剑指offer 28 字符串的排列
package offer;import java.util.*;/** * 面试题28:字符串的排列,给一个字符串打印出来所有排列 * 思路:1、首先求出所有可能出现在第一个位置的字符,把第一个字符和后面所有的字符交换 * 2、固定第一个字符,从第二个字符开始与后面交换,是个递归的过程 * 扩展:用treeSet解决了aaa字符串重复问题(剑指offer解法未解决) ...原创 2018-06-24 21:33:36 · 175 阅读 · 0 评论 -
剑指offer 17 合并两个排序链表
package offer;/** * 面试题17:合并两个排序链表 * Created by Dennis on 2018/6/24. */public class Problem17MergeList { public ListNode mergeList(ListNode head1, ListNode head2) { if (head1 == nul...原创 2018-06-24 17:30:57 · 152 阅读 · 0 评论 -
剑指offer 16 反转链表
package offer;/** * 面试题16:反转链表,输入一个链表的头结点,反转该链表并输出反转后链表的头结点 * 思路:需要定义3个指针,分别指向当前遍历到的结点,前一个结点和后一个结点以防止链表断裂 * Created by Dennis on 2018/6/24. */public class Problem16ReverseList { public Lis...原创 2018-06-24 16:53:52 · 154 阅读 · 0 评论 -
剑指offer 13 删除链表结点
package offer;/** * 面试题13:删除链表结点 * 思路:三种情况需要考虑清楚 * 1、只有一个结点,既是头结点也是尾结点 * 2、删除尾结点 * 3、链表为空 * Created by Dennis on 2018/6/23. */public class Problem13DeleteNode { public void delete(ListN...原创 2018-06-23 20:17:15 · 175 阅读 · 0 评论 -
剑指offer 7 用两个栈实现队列
package offer;import java.util.Stack;/** * 面试题7:两个栈实现队列,并实现两个函数的功能 appendTail和deleteHead,完成在队列尾部插入结点和在头部删除结点功能 * * Created by Dennis on 2018/6/23. */public class Problem7Queue<T> { ...原创 2018-06-23 17:21:52 · 125 阅读 · 0 评论 -
剑指offer 5 从尾到头打印链表
package offer;import java.util.ArrayList;import java.util.Stack;/** * 面试题5:输入一个链表的头结点,从尾到头反过来打印出每个结点的值 * 思路:1、第一个遍历的最后一个输出,典型的后进先出,可以用栈,将结点放到栈中,然后遍历完后从栈顶输出值 * Created by Dennis on 2018/6/23....原创 2018-06-23 16:23:38 · 133 阅读 · 0 评论 -
剑指offer 2 单例模式
饿汉式、懒汉式、IoDH式package CreationalPattern.Singleton;/** * 饿汉式单例模式 * 优点:在类加载时就已经实例化,无须考虑多线程的问题,调用速度和反应时间优于懒汉式。 * 缺点:资源利用率不及懒汉式,加载时间可能会比较长。 * * Created by Dennis on 2018/6/14. */public class Eager...原创 2018-06-14 11:54:27 · 235 阅读 · 0 评论 -
剑指offer 30 最小的k个数
面试题30:最小的k个数,输入n个整数,找到其中最小的k个数 思路 1、输入的n个数排序,最前面的k个数就是最小的k个数,算法复杂度为O(nlogn) 2、询问面试官是否可以修改数组,如果可以,则有快排思想,最左边的全部比k 如果不可以修改数组,则创建一个大小为k的容器来存储最小的k个数字,每次输入一个数,如果容器小 ...原创 2018-06-28 11:20:37 · 158 阅读 · 0 评论 -
剑指offer 32 从1到n整数中1出现的次数
package offer;/** * 面试题32:从1到n整数中1出现的次数,如1--12中包含1 的有1,10,11,12,一共出现了5次 * 思路:累加1到n中每个整数中1出现的次数,对10求余判断整数的个位数字是不是1,如果大于10就先除以10后再判断 O(nlogn) * * @auther Dennis * @date 2018/7/24 */public clas...原创 2018-07-24 10:20:06 · 183 阅读 · 0 评论 -
LeetCode【58】LengthOfLastWord
package Leetcode.easy;/** * 统计最后一个单词的长度 * 思路:第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5 * 第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5 * 所以...原创 2019-07-24 09:55:04 · 213 阅读 · 0 评论 -
LeetCode【20】Valid Parentheses
package Leetcode.easy;import java.util.Stack;/** * Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. * * An input string ...原创 2018-12-28 19:47:17 · 184 阅读 · 0 评论 -
LeetCode【14】 Longest Common Prefix
package Leetcode.easy;/** * Write a function to find the longest common prefix string amongst an array of strings. * If there is no common prefix, return an empty string "". * * Example 1: * I...原创 2018-12-28 19:29:07 · 170 阅读 · 0 评论 -
LeetCode【9】 Palindrome Number
package Leetcode.easy;/** * Determine whether an integer is a palindrome. * An integer is a palindrome when it reads the same backward as forward. * <p/> * Example 1: * Input: 121 * Out...原创 2018-12-28 18:47:26 · 258 阅读 · 0 评论 -
LeetCode【7】 Reverse Integer
package Leetcode.easy;/** * Given a 32-bit signed integer, reverse digits of an integer. * Example 1: * Input: 123 * Output: 321 * Example 2: * Input: -123 * Output: -321 * Example 3: *...原创 2018-12-28 18:44:39 · 209 阅读 · 0 评论 -
剑指offer 47 不用加减乘除做加法
package offer;/** * 面试题47:不用加减乘除做加法 * 思路: * * @auther Dennis * @date 2018/7/27 */public class Problem47Add { private int Add(int num1, int num2) { int sum, carry; do { ...原创 2018-07-27 10:17:15 · 195 阅读 · 0 评论 -
剑指offer 45 圆圈中最后剩下的数字
package offer;/** * 面试题45:约瑟夫环问题 * 递推公式:last = (last+m) % i * @auther Dennis * @date 2018/7/27 */public class Problem45LastRemaining { private int lastRemaining(int n, int m){ if...原创 2018-07-27 09:49:27 · 242 阅读 · 0 评论 -
剑指offer 34
package offer;import java.util.ArrayList;import java.util.List;/** * 面试题34:丑数,只包含2,3,5为因子的数 求从小到大的顺序的第1500个丑数,1为第一个丑数 * 思路:1、可以直接判断是不是丑数连续除2,3,5如果最后是1则为丑数,不管怎样都需要大量除法运算 * 2、空间换时间,创建一个数组,里面的...原创 2018-07-24 17:21:41 · 198 阅读 · 0 评论 -
剑指offer 15 链表中倒数第k个节点
思路:定义两个指针,第一个指针向前先走k-1步,第二个指针不动,从第k步开始,第二个指针也开始从头开始遍历,当第一个指针到达尾结点时,第二个指针正还是倒数第k个结点。...原创 2018-05-28 10:22:57 · 174 阅读 · 0 评论 -
如何判断单链表是否有环,得到单链表的中间节点
1、判断是否有环:使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、得到中间节点:同样快慢指针,快指针走2步,慢指针走1步,快指针到头的时候慢指针就在中间节点...原创 2018-05-28 09:54:09 · 252 阅读 · 0 评论 -
剑指offer 14 调整数组顺序使奇数位于偶数前面
package offer;/** * 调整数组顺序使得奇数放在偶数前面,双指针法,一个指针指向头一个指针指向末尾,然后奇数和偶数对换位置 * * @auther Dennis * @date 2018/4/16 */public class Problem14ReorderOddEven { private boolean isEven(int a) { ...原创 2018-04-16 09:34:06 · 196 阅读 · 0 评论 -
LeetCode【53】Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1]原创 2017-12-04 17:00:03 · 279 阅读 · 0 评论 -
LeetCode【35】Search Insert Position
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in the array....原创 2017-12-04 13:14:13 · 227 阅读 · 0 评论 -
LeetCode【122】Best Time to Buy and Sell Stock II
/** * 题意:和121题不同的地方是可以多次买卖任意次,然后求多次买卖后最大利润 * * @auther Dennis * @date 2017/12/13 * 思想:贪心思想,最大的收益方法就是尽可能多的低入高抛,只要明天比今天价格高,就今天买,明天卖 */public class BestTimetoBuyandSellStockII { public static原创 2017-12-13 10:10:42 · 454 阅读 · 0 评论 -
LeetCode【121】Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock),原创 2017-12-13 09:57:49 · 310 阅读 · 0 评论 -
LeetCode【88】 Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold add原创 2017-12-12 20:07:45 · 258 阅读 · 0 评论 -
LeetCode【66】 Plus One
/** * 给一个数组(首位不为0)加上一个数,返回这个素数组 * 思想:需要考虑进位,如果加到数组第一个元素还需要进位则需要在第一个位置也就是a[0]位置加上1 */public static int[] plusOne(int[] nums) { int n = nums.length; for (int i = n - 1; i >= 0; i--) { if原创 2017-12-11 15:19:07 · 275 阅读 · 0 评论 -
LeetCode【26】Remove Duplicates from Sorted Array
给定一个排序数组,删除重复的位置,使每个元素只出现一次,并返回新的数组长度。不要为另一个数组分配额外的空间,必须使用O(1)内存修改输入数组来实现这一点。Given nums = [1,1,2],Your function should return length = 2, with the first two elements of nums being 1 and 2 respec原创 2017-11-29 13:52:23 · 248 阅读 · 0 评论 -
LeetCode【1】TwoSum
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].返回的是两个元素的索引//第一种方法:蛮力法 时间复杂度O(n²) 空间复杂度O(1)public static int[] twoSum1(int[] num, int target) {原创 2017-10-15 19:21:56 · 310 阅读 · 0 评论 -
剑指offer 3:二维数组中的查找
package offer;/** * 面试题3:二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 * 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * * @auther Dennis * @date 2017/12/15 * 思想:假设需要查找的数字为x,首先选取数组中右上角的数字。如果该数字等...原创 2017-12-19 14:39:50 · 320 阅读 · 0 评论 -
剑指offer 4 替换空格
package offer;/** * 面试题4:在字符串中的每个空格替换成“%20”,例如输入“we are happy.”则输出“we%20are%20happy.” * Created by dennis on 2018/3/22. */public class Problem4ReplaceBlank { public static String replace(S...原创 2018-03-29 09:51:56 · 174 阅读 · 0 评论 -
排序算法比较(着重掌握的3种排序)
红色勾的3个最好能滚瓜烂熟,很轻松的手写出来原创 2018-04-03 09:46:47 · 287 阅读 · 0 评论 -
直接插入排序
package offer;/** * 直接插入排序:从右到左找a[i]的插入位置,然后将大于a[i]的元素向后移 * Created by dennis on 2018/4/3. */public class InsertSort { public static void insertSort(int a[]) { int j, tmp; f原创 2018-04-03 10:36:32 · 185 阅读 · 0 评论 -
简单选择排序
package offer;/** * 直接选择排序:第一轮比较后选出数中最小的元素,然后和第一个记录的位置进行交换 * Created by Administrator on 2018/4/3. */public class SelectSort { public static void selectSort(int a[]) { int k, tmp;原创 2018-04-03 10:21:34 · 143 阅读 · 0 评论 -
冒泡排序
package offer;/** * 冒泡排序: 外层循环控制比较次数,内层循环比较两个数的大小,看是否交换 * Created by dennis on 2018/4/3. */public class BubbleSort { public static void bubbleSort(int a[]) { int tmp; for (i原创 2018-04-03 10:04:51 · 157 阅读 · 0 评论 -
剑指offer 11 数值的整数次方
package offer;/** * 求数值的整数次方,需要考虑全面 * 1、0为底时负数次幂无意义,0为指数值为1,1为指数值为其本身 * 2、指数为负数时,注意为倒数 * 3、计算机中判断相等时考虑精度的问题,自己定义equals方法 * * @auther Dennis * @date 2018/4/15 */public class Problem11Power {...原创 2018-04-15 13:35:11 · 204 阅读 · 0 评论 -
剑指offer 10 二进制中1的个数
package offer;/** * 移位效率比除法效率高很多,实际编程中尽可能的用移位代替乘除法 * 思路:将一个数如x,在x减1后,得到的结果和x的二进制进行“与”运算,得到的结果会把x最右边的一个1变成0,那么一个整数的二进制中 * 有多少个1就可以进行多少次这样的操作,所以有多少个1就循环多少次。如果直接和1做与运算,那么32位的数就要循环32次,这种方法 * ...原创 2018-04-09 11:14:49 · 156 阅读 · 0 评论 -
剑指offer 9 斐波那契数列
如果用课本上的递归方法,效率会很低,因为计算量随着n的增大,而急剧增大,哪怕是才算到100,都会很慢,所以从下到上计算会好很多。package offer;/** * 思路:从下到上计算,根据f0和f1算出f2,f1,f2算出f3,依次类推,不用递归效率会高出很多 * @auther Dennis * @date 2018/4/9 */public class Fibonacci {...原创 2018-04-09 09:48:44 · 162 阅读 · 0 评论 -
快速排序
package offer;/** * 快速排序:高效的排序算法,采用分而治之的思想,大的拆分为小的,小的拆分为更小的,一趟排序后,原序列分为两部分,前面 * 一部分比后面一部分所有记录都要小,再一次对前后两部分记录进行快速排序,递归该过程 * Created by dennis on 2018/4/3. */public class QuickSort { public原创 2018-04-08 09:47:22 · 178 阅读 · 0 评论