leetcode算法题
小白之路
一个希望成长的小白,博客主要是记录自己的学习过程,希望有一天也能写出属于自己的东西。
展开
-
121. 买股票的最佳时机(过程分析)
//状态机或者说是动态规划,看题解过程更好理解class Solution { public int maxProfit(int[] prices) { if(prices.length == 0 || prices == null){ return 0; } int n = prices.length; int[][] dp = new int[n][2]; for(int i = 0; i.原创 2020-10-20 20:27:05 · 232 阅读 · 1 评论 -
62. 不同路径(过程分析)
//动态规划的好例子,优化和数学方法暂时不深究,先学会走路。class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; for(int i = 0; i < m; i++) dp[i][0] = 1;; for(int j = 0; j < n; j++) dp[0][j] = 1; for(int i = 1; .原创 2020-10-16 17:10:43 · 196 阅读 · 0 评论 -
752. 打开转盘锁(过程分析)
//对BFS的理解会更加通彻class Solution { public int openLock(String[] deadends, String target) { //保存死亡数字.为什么要保存? //因为可以使用contains方法判断, 而不需要for循环遍历数组 Set<String> deads = new HashSet<String>(); for(String s : deadends.原创 2020-10-14 20:37:07 · 194 阅读 · 0 评论 -
12. 整数转罗马数字(过程分析)
//贪心算法class Solution { public String intToRoman(int num) { int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; StringBuilde.原创 2020-09-16 16:49:07 · 150 阅读 · 0 评论 -
11.盛最多水的容器(过程分析)
//双指针法class Solution { public int maxArea(int[] height) { int i = 0, r = height.length - 1; int ans = 0; while(i < r){ int area = Math.min(height[i], height[r]) * (r - i); ans = Math.max(ans, area).原创 2020-09-16 15:44:15 · 109 阅读 · 0 评论 -
8.字符串转换整数(过程分析)
//主要考过滤处理class Solution { public int myAtoi(String str) { if(str==null || str.length()<=0) return 0; //正负数的最大最小值 int MAX = Integer.MAX_VALUE,MIN=Integer.MIN_VALUE; int res = 0, index = 0; //过滤开头空格 .原创 2020-09-13 16:57:06 · 163 阅读 · 0 评论 -
7.整数反转(过程分析)
//此题主要考点是对溢出的考虑class Solution { public int reverse(int value) { int res = 0; while(value != 0 ){ int tmp = value % 10; if(res > 214748364 || res==214748364 && tmp > 7){ return 0; .原创 2020-09-13 15:30:55 · 140 阅读 · 0 评论 -
6. Z字型变换(过程分析)
//按行访问(每一行放入单独的容器)class Solution { public String convert(String s, int numRows) { if(s == null || s.length() == 0 || numRows <=1 || numRows > s.length()) return s; StringBuilder[] array = new StringBuilder[numRows]; fo.原创 2020-09-13 14:44:57 · 153 阅读 · 0 评论 -
5.最长回文子串(过程分析)
//动态规划 => 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。class Solution { public String longestPalindrome(String s) { int len = s.length(); if(len < 2){ return s; } int maxLen = 1; .原创 2020-09-13 13:08:02 · 166 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数(过程分析)
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { //判断是偶数个还是奇数个 int length1 = nums1.length, length2 = nums2.length; int totalLength = length1 + length2; if (totalLength % 2 == 1) { i.原创 2020-09-12 15:48:11 · 131 阅读 · 0 评论 -
3.无重复字符的最长子串(过程分析)
class Solution { public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new HashSet<Character>(); int n = s.length(); // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动。rk = -1 比 rk = .原创 2020-09-12 13:58:06 · 125 阅读 · 0 评论 -
2.两数相加(过程分析)
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) { int x = (p != null) ? p.val : 0; int.原创 2020-09-12 12:40:10 · 200 阅读 · 0 评论 -
1.两数之和(过程分析)
//一遍hash表class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if .原创 2020-09-12 11:50:18 · 190 阅读 · 0 评论