数学
leetCode
059
这个作者很懒,什么都没留下…
展开
-
行星碰撞( 暴力从左遍历 + 栈)
思路i >= 0这个条件,属于边界条件,不写会卡用例,1, -2, -2, -2。import java.util.Arrays;class Suit { public static int[] asteroidCollision(int[] asteroids) { int len = asteroids.length; int size = len; for (int i = 0; i < size - 1; i++) { .原创 2021-10-10 18:37:32 · 101 阅读 · 0 评论 -
三角形的最大周长
一、题目二、思路循环中的i–,有的时候总是考虑成i = i -2。class Solution { public int largestPerimeter(int[] nums) { Arrays.sort(nums); int len = nums.length; for (int i = len - 1; i >= 2; i --) { if (isTri(nums[i], nums[i - 1], nums原创 2021-09-25 18:55:52 · 103 阅读 · 0 评论 -
Excel表列名称
一、题目二、代码注意边界值26相关的例如52class Solution { private static char[] ch = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; public static String convert原创 2021-09-25 18:37:51 · 98 阅读 · 0 评论 -
计数质数(埃及筛)
一、题目二、代码暴力解法。从质数n的定义入手,遍历从2到n-1,如果取余为0则为合数。可以优化即不用遍历到n-1,而是到根号n。class Solution { public int countPrimes(int n) { int count = 0; for (int i = 2; i < n; i++) { if (isPrime(i)) { count++; .原创 2021-08-21 16:42:16 · 680 阅读 · 0 评论 -
图像渲染(DFS)
一、题目有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr, sc)表示图像渲染开始的像素值(行 ,列)和一个新的颜色值newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回...原创 2021-02-19 13:06:45 · 207 阅读 · 0 评论 -
最大连续1的个数
一、题目二、代码一次遍历数组class Solution { public int findMaxConsecutiveOnes(int[] nums) { int maxCount = 0;//最大次数 int count = 0;//当前次数 int len = nums.length; for(int i = 0; i < len; i++){ if(nums[i] == 1){原创 2021-02-15 16:13:22 · 103 阅读 · 0 评论 -
快乐数(快慢指针)
一、题目二、代码暴力法class Solution { //19 / 10 = 1...9 9 / 10 = 0....9 public List<Integer> getBits(int n){ int remainder = 0; List<Integer> bits = new LinkedList<>(); while(n != 0){ remain.原创 2021-02-10 17:08:20 · 83 阅读 · 0 评论 -
买卖股票的最佳时机(双指针)
一、题目二、代码暴力法class Solution { public int maxProfit(int[] prices) { int profit = 0; int len = prices.length; for(int start = 0; start < len; start++) for(int end = start + 1; end < len; end++){ .原创 2021-02-08 19:34:42 · 248 阅读 · 0 评论 -
冒泡排序和双指针解决颜色分类
一、题目二、代码冒泡排序class Solution { public void sortColors(int[] nums) { // Arrays.sort(nums); for(int i = 0; i < nums.length - 1; i++){ for(int j = 0; j < nums.length - 1; j++){ if(nums[j] > nums[.原创 2020-06-04 14:02:49 · 214 阅读 · 0 评论 -
广度优先遍历被围绕的区域
class Solution { private int m; private int n; private class Point{ int i; int j; Point(int i, int j){ this.i = i; this.j = j; } } public void bfs(int i_, int j_, char[][] board...原创 2020-09-11 23:14:37 · 119 阅读 · 0 评论 -
深度遍历解决被围绕的区域
深度遍历class Solution { private int m; private int n; public void dfs(int i, int j, char[][] board){ if(i < 0 || i >= m || j < 0 || j >= n || board[i][j] == '#' || board[i][j] == 'X'){ return; } ...原创 2020-09-11 22:13:01 · 172 阅读 · 0 评论 -
并查集解决被围绕的区域
并查集可参考此文章public class Solution { //并查集 private static class UnionFind{ int[] parents; UnionFind(int size){ parents = new int[size]; //并查集数组初始化 for(int i = 0; i < size; i++){ pa..原创 2020-09-09 22:59:21 · 182 阅读 · 0 评论 -
质数因子
这样的题需要手动模拟过程,便可写出代码。16 / 2 = 8...0 ; 8 / 2 = 4.....0; 4 / 2 = 2...0; 2 /2 = 1...0import java.util.*;public class Main{ public static void getResult(long num){ long i = 2; long result = 0; while(result != 1){ ...原创 2020-08-31 19:58:06 · 138 阅读 · 0 评论 -
查找输入整数二进制中1的个数
import java.util.*;public class Main{ // 5 / 2 = 2.....1; 2 / 2 =1....0;1 / 2 = 0....1 public static int oneNum(int num){ int div = num / 2; int remainder = num % 2; int result = 0; if(remainder == 1){ ...原创 2020-08-29 11:04:32 · 114 阅读 · 0 评论 -
百钱白鸡
import java.util.*;public class Main{ public static void GetResult(){ for(int i = 0; i < 100; i++){ for(int j = 0; j < 100; j++){ int k = 100 - i - j; if(k % 3 == 0 && i * 5 + j * ...原创 2020-08-28 18:46:35 · 110 阅读 · 0 评论 -
辗转相除法求最小公倍数
牛客网和力扣不同的地方在于输入输出要自己实现import java.util.Scanner;public class Main{ public static void getResult(int x, int y){ //最小公倍数 = 两数相乘 / 最大公约数 int leastCommonMultiple = x * y / greatestCommonDivisor(x, y); System.out.println(least...原创 2020-08-28 18:40:57 · 1226 阅读 · 0 评论 -
杨辉三角
代码class Solution { public List<List<Integer>> generate(int numRows) { //初始化 List<List<Integer>> allList = new ArrayList<>(); for(int i = 0; i < numRows; i++){ List<Integer>...原创 2020-08-20 17:49:51 · 101 阅读 · 0 评论 -
两数之和
暴力法class Solution { public int[] twoSum(int[] nums, int target) { int []numId = new int[2]; for(int i = 0; i < nums.length; i++ ){ for(int j = i + 1; j < nums.length; j++){ if(nums[i] + nums[j] ==...原创 2020-08-14 13:18:09 · 160 阅读 · 0 评论 -
检测大写字母
代码:class Solution { public boolean detectCapitalUse(String word) { if(word.charAt(0) >= 'A' && word.charAt(0) <= 'Z'){ for(int i = 1; i < word.length() -1; i++){ if(word.charAt(i)>...原创 2020-08-13 21:32:17 · 191 阅读 · 0 评论 -
格雷编码
class Solution { public List<Integer> grayCode(int n) { //G(i) = i ^ (i/2) List<Integer> result = new ArrayList<>(); for(int i = 0; i < 1<<n; ++i) result.add(i ^ (i/2)); return r...原创 2020-07-25 11:57:55 · 170 阅读 · 0 评论 -
螺旋矩阵
一、题目二、代码按上右下左的行添加到链表class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> result = new LinkedList<>(); if(matrix.length == 0){ return result; } //初始化 ..原创 2020-07-14 12:12:41 · 147 阅读 · 0 评论 -
Pow(x, n)(递归)
一、题目二、代码暴力解法class Solution { public double myPow(double x, int n) { boolean negative = false;//以下三种测试用例均有提交出错推断出来 if(x == 1){ return 1; } if(x == -1){ if(n % 2 == 1){ re.原创 2020-07-13 12:04:04 · 227 阅读 · 0 评论 -
有效的数独
一、题目二、代码一行一行的遍历,注意子数独下标 boxIndex = (i / 3) * 3 + j / 3class Solution { public boolean isValidSudoku(char[][] board) { Map<Integer, Integer>[] rowsMap = new HashMap[9]; Map<Integer, Integer>[] columnsMap = new Has...原创 2020-07-07 12:53:34 · 121 阅读 · 0 评论 -
下一个排列
一、题目二、代码思路:一种情况是,例如一个数为123654,从位数5开始,其右边没有比它大的数,与4交换只会使得排列更小,向前推一位,以此类推,到3时,3 < 6。于是3与此数的末位比较,若3 >= 此数末位,则向前推一位继续和3比较;如果3 < 此数末位,则交换,此处是4,因此交换。交换之后此数变为124653,将653逆序,则可得到正确答案即124356。另一种情况是,例如一个数为654321,则逆序class Solution { public ..原创 2020-07-02 15:49:15 · 85 阅读 · 0 评论 -
两数相除
一、题目二、代码class Solution { public int divide(int dividend, int divisor) { if(dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE; boolean flag = (dividend > 0 && divisor > 0)||(dividend < 0 &..原创 2020-06-25 17:16:25 · 139 阅读 · 0 评论 -
括号生成
一、题目二、代码长度为n的序列就是在长度为n-1的序列前加一个'('或')'class Solution { List<String> result = new ArrayList<>(); public List<String> generateParenthesis(int n) { int index = 0; generateParenthesis_(new char[2 * n]...原创 2020-06-22 12:49:11 · 280 阅读 · 0 评论 -
Z 字形变换
一、题目二、代码最容易想到用二维数组的方法去做,但过于麻烦。下面使用一种简单的方法去做。从左向右遍历字符串。将每行定义成字符串数组,最后再将该数组拼接起来即可。因为字符串转换过程即向下向右,反复循环过程,设定 down 变量表示是否向下,loc 变量表示当前字符串数组的下标,如果 down 为 true,则 loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中;如果 down为 false,则表示向右,则 loc−=1,字符串数组下标向前移动,将当前字符加入当前字符串中。..原创 2020-06-16 15:22:25 · 115 阅读 · 0 评论 -
三指针解决三数之和
一、题目二、代码最容易想到的思路就是暴力解法,三重循环,但是会超时。下面采用排序 + 双指针的方法进行优化。对数组进行排序 遍历该数组。如果nums[i]>0,后面的数肯定都>0,不会出现三数相加==0的情况,可以直接返回。如果nums[i] == nums[i + 1],属于重复元素,可能会出现重复解,因此跳过 设置双指针 j = i + 1, m = len - 1。j < m时,执行循环: 当 nums[i]+nums[j]+nums[m]==0,执..原创 2020-06-15 15:39:03 · 215 阅读 · 0 评论 -
二进制求和
一、题目二、代码引入大整数import java.math.BigInteger;class Solution { public String addBinary(String a, String b) { BigInteger aBig =new BigInteger(a,2); BigInteger bBig =new BigInteger(b,2); BigInteger result = aBig.add(bBig);..原创 2020-06-14 18:57:28 · 126 阅读 · 0 评论 -
盛最多水的容器
一、题目二、代码暴力解法。根据木桶法则,找到最小的边,即该容器的高。class Solution { public int maxArea(int[] height) { int maxv = 0; for(int i = 0; i < height.length; i++){ for(int j = i+ 1; j < height.length; j++){ maxv = M..原创 2020-06-13 14:44:33 · 132 阅读 · 0 评论 -
非空数组表示整数 加一
一、题目二、代码引入进位标志class Solution { public int[] plusOne(int[] digits) { int len = digits.length; boolean carry = false; //引入进位标志 for(int i = len - 1; i >= 0; i--){ if(i == len - 1){ digits[i] .原创 2020-06-13 13:58:02 · 164 阅读 · 0 评论 -
最长回文子串
一、题目二、代码暴力解法使用二重循环判断所有字符串是否为回文字符串,超时。class Solution { public String longestPalindrome(String s) { if(s.length() < 2){ return s; } int maxLen = Integer.MIN_VALUE; String maxpalindrome = ""; ...原创 2020-06-13 13:16:24 · 109 阅读 · 0 评论 -
罗马数字转整数
一、题目二、代码class Solution { public int romanToInt(String s) { Map<Character, Integer> numsMap = new HashMap<>(); numsMap.put('I', 1); numsMap.put('V', 5); numsMap.put('X', 10); numsMap.put('L', 5.原创 2020-06-10 20:39:13 · 159 阅读 · 0 评论 -
使用二分法计算x 的平方根
一、题目二、代码注意:1.乘法溢出转换成除法计算 2.最大的初始值设x /2class Solution { public int mySqrt(int x) { if(x == 1){ return 1; } int left = 1; int right = x / 2; while(left <= right){ int mid ...原创 2020-06-10 19:24:46 · 286 阅读 · 0 评论 -
整数反转
一、思路此题可用纯数学的方式去做,也可另辟蹊径,直接通过整形与字符串的相互转化来做。思路:整型转化为字符串,给字符串进行反转。 考虑整数可能为负数的情况。 考虑整数可能溢出的情况。二、代码话不多说,上代码。class Solution { public int reverse(int x) { String s = Integer.toString(x); int length = s.len..原创 2020-05-29 18:43:03 · 143 阅读 · 0 评论 -
回文数
一、思路思路一:整数转化为字符串 字符串翻转后和原字符串比较,如果相等则为回文数。思路二:整数不断 / 10二、代码思路一:借用StringBuffer()中的reverse简化。class Solution { public boolean isPalindrome(int x) { String str = Integer.toString(x); String reverse = new StringBuffer(str)..原创 2020-06-06 13:51:24 · 310 阅读 · 0 评论