----------------------------------------------------------------------------html
public int firstMissingPositive(int[] nums) { if(nums == null || nums.length == 0){ return 1; } int len = nums.length; for (int i = 0; i < len ; i++) { while (nums[i] >0 && nums[i] <= len && nums[i]!=nums[nums[i]-1]){ swap(nums,i,nums[i]-1); } } int res = 1; for (int i = 0; i < len; i++) { if(nums[i] != i+1){ break; } res++; } return res; } private void swap(int[] nums,int i, int j){ int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }
public void rotate(int[][] matrix) { if (matrix == null || matrix.length == 0) { return; } int rowStart = 0; int colStart = 0; int rowEnd = matrix.length - 1; int colEnd = matrix[0].length - 1; while (rowStart < rowEnd) { help(matrix,rowStart,colStart,rowEnd,colEnd); rowStart++; colStart++; rowEnd--; colEnd--; } } private void help(int[][] matrix, int rowStart, int colStart, int rowEnd, int colEnd) { int time = rowEnd - rowStart ; for (int i = 0; i < time; i++) { int tmp = matrix[rowStart][colStart + i]; matrix[rowStart][colStart + i] = matrix[rowEnd - i][colStart]; matrix[rowEnd - i][colStart] = matrix[rowEnd][colEnd - i]; matrix[rowEnd][colEnd - i] = matrix[rowStart + i][colEnd]; matrix[rowStart + i][colEnd] = tmp; } }
public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); if (matrix == null || matrix.length == 0) { return list; } int startx = 0; int starty = 0; int endx = matrix.length-1; int endy = matrix[0].length-1; while (startx < endx && starty < endy) { for (int i = starty; i < endy ; i++) { list.add(matrix[startx][i]); } for (int i = startx; i < endx ; i++) { list.add(matrix[i][endy]); } for (int i = endy; i > starty; i--) { list.add(matrix[endx][i]); } for (int i = endx ; i > startx; i--) { list.add(matrix[i][starty]); } startx++; endx--; starty++; endy--; } //只有一行時 if(starty == endy){ while (startx <= endx) { list.add(matrix[startx++][starty]); } }else { //只有一列時 if(startx == endx){ while (starty <= endy) { list.add(matrix[startx][starty++]); } } } return list; }
public int[][] generateMatrix(int n) { int[][] matrix = new int[n][n]; if(n == 0){ return matrix; } int num = 1; int startX = 0; int startY = 0; int endX = n-1; int endY = n-1; int tar = n*n; while (num <= tar){ for (int i = startY; i <= endY ; i++) { matrix[startX][i] = num++; } startX++; for (int i = startX; i <= endX ; i++) { matrix[i][endY] = num++; } endY--; for (int i = endY; i >= startY ; i--) { matrix[endX][i] = num++; } endX--; for (int i = endX; i >= startX ; i--) { matrix[i][startY] = num++; } startY++; } return matrix; }
public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { digits[i]++; digits[i] = digits[i] % 10; if (digits[i] != 0){ return digits; } } digits = new int[digits.length + 1]; digits[0] = 1; return digits; }
public void setZeroes(int[][] matrix) { if(matrix == null || matrix.length == 0){ return; } int row = matrix.length; int col = matrix[0].length; boolean firstColHasZero = false; for (int i = 0; i < row ; i++) { //第一列是否有0值 if(matrix[i][0] == 0){ firstColHasZero = true; } for (int j = 1; j < col; j++) { if(matrix[i][j] == 0){ matrix[i][0] = 0; matrix[0][j] = 0; } } } //行置零 for (int i = 1; i < row; i++) { if(matrix[i][0] == 0){ for (int j = 1; j <col; j++) { matrix[i][j] = 0; } } } //列置零 for (int i = 1; i < col; i++) { if(matrix[0][i] == 0){ for (int j = 1; j<row; j++) { matrix[j][i] = 0; } } } //第一行 if(matrix[0][0] == 0){ for (int j = 1; j <col; j++) { matrix[0][j] = 0; } } //第一列 if(firstColHasZero){ for (int i = 0; i < row ; i++) { matrix[i][0] = 0; } } }
------------------------------------------------------------------------------java
package leetcode; /*created by fanqunsong Date : 2017/12/22 Time : 16:32 Tips:先買才能賣 */ public class Solution210 { public static void main(String[] args) { int[] num = new int[]{1,2}; System.out.println(maxProfit(num)); } public static int maxProfit(int[] prices) { if(prices.length == 0 ||prices.length == 1 || prices == null){ return 0; } int min = prices[0]; int res = 0; for (int i = 1; i < prices.length; i++) { if(prices[i]>min){ res = res > prices[i] - min?res : prices[i] - min; } else { min = prices[i]; } } return res; } }
public int trap(int[] height) { if(height == null || height.length < 3){ return 0; } //left[i]表示第i列左邊的最高的列值,包含第i列 int[] left = new int[height.length]; left[0] = height[0]; for (int i = 1; i < height.length ; i++) { left[i] = left[i-1] > height[i]?left[i-1] : height[i]; } //right[i]表示第i列右邊的最高的列值,包含第i列 int[] right = new int[height.length]; right[height.length -1] = height[height.length-1]; for (int i = height.length-2; i >= 0 ; i--) { right[i] = right[i+1] > height[i]?right[i+1] : height[i]; } int sum = 0; for (int i = 1; i < height.length-1 ; i++) { sum += Math.min(left[i],right[i])-height[i]; } return sum; }
-------------------------------------------------------------------------------------app
package leetcode; /*created by fanqunsong Date : 2017/12/22 Time : 17:09 */ public class Solution209 { public static void main(String[] args) { int[] num = new int[]{1,2}; System.out.println(maxProfit(num)); } public static int maxProfit(int[] prices) { if(prices.length == 0 ||prices.length == 1 || prices == null){ return 0; } int[] profit = new int[prices.length-1]; for (int i = 1; i < prices.length; i++) { profit[i-1] = prices[i] - prices[i-1]; } int sum = 0; for (int i = 0; i < profit.length; i++) { if (profit[i]>0){ sum += profit[i]; } } return sum; } }
------------------------------------------------------------------------------------htm
The number of elements initialized in A and B are m and n respectively.element
package leetcode; /*created by fanqunsong Date : 2017/12/21 Time : 16:59 */ /* Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively. */ /* tips:從後往前記錄 */ public class Solution401 { public void merge(int A[], int m, int B[], int n) { int j = m+n-1; m--; n--; while(m>=0 && n>=0){ A[j--] = A[m] > B[n]? A[m--] : B[n--]; } if(n>=0){ while (n>=0){ A[j--] = B[n--]; } } } }
-------------------------------------
502 Given a number represented as an array of digits, plus one to the number
public class Solution { public int[] plusOne(int[] digits) { int sum = digits.length; digits[sum-1] ++; for (int i = sum-1; i >0 ; i--) { if(digits[i]>9){ digits[i] = 0; digits[i-1]++; } } if(digits[0]<10){ return digits; } int[] res = new int[sum+1]; res[0] = 1; res[1] = 0; for (int i = 2; i <= sum ; i++) { res[i] = digits[i-1]; } return res; } }
-------------------------------------
public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); if (matrix == null || matrix.length == 0) { return list; } int startx = 0; int starty = 0; int endx = matrix.length-1; int endy = matrix[0].length-1; while (startx < endx && starty < endy) { for (int i = starty; i < endy ; i++) { list.add(matrix[startx][i]); } for (int i = startx; i < endx ; i++) { list.add(matrix[i][endy]); } for (int i = endy; i > starty; i--) { list.add(matrix[endx][i]); } for (int i = endx ; i > startx; i--) { list.add(matrix[i][starty]); } startx++; endx--; starty++; endy--; } //只有一行時 if(starty == endy){ while (startx <= endx) { list.add(matrix[startx++][starty]); } }else { //只有一列時 if(startx == endx){ while (starty <= endy) { list.add(matrix[startx][starty++]); } } } return li
public int[][] generateMatrix(int n) { int[][] matrix = new int[n][n]; if(n == 0){ return matrix; } int num = 1; int startX = 0; int startY = 0; int endX = n-1; int endY = n-1; int tar = n*n; while (num <= tar){ for (int i = startY; i <= endY ; i++) { matrix[startX][i] = num++; } startX++; for (int i = startX; i <= endX ; i++) { matrix[i][endY] = num++; } endY--; for (int i = endY; i >= startY ; i--) { matrix[endX][i] = num++; } endX--; for (int i = endX; i >= startX ; i--) { matrix[i][startY] = num++; } startY++; } return matrix; }
---
public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { digits[i]++; digits[i] = digits[i] % 10; if (digits[i] != 0) return digits; } digits = new int[digits.length + 1]; digits[0] = 1; return digits; }