classSolution{ publicintmaxSubArray(int[] nums){ if (nums.length==0) return0; int maxSum = nums[0]; int curSum = nums[0]; if (nums.length==1) return curSum; for (int i=1; i<nums.length; i++) { if (curSum<=0) curSum = nums[i]; else curSum += nums[i]; maxSum = Math.max(maxSum, curSum); } return maxSum; } }
classSolution{ publicint[][] generateMatrix(int n) { int[][] res = newint[n][n]; int l = 0, r = n-1, t = 0, b = n-1; int num = 1; while (num <= n*n) { for (int i=l; i<=r; i++) { res[t][i] = num++; }t++; //从左往右
classSolution{ publicintthreeSumClosest(int[] nums, int target){ if (nums.length<3) return0; Arrays.sort(nums); int res = nums[0] + nums[1] + nums[2]; for (int i=0; i<nums.length-2; i++) { int j = i+1, k = nums.length-1; while (j<k) { int threeSum = nums[i] + nums[j] + nums[k]; if (Math.abs(threeSum-target)<Math.abs(res-target)) res = threeSum; if (threeSum<target) j++; elseif (threeSum>target) k--; elsereturn target; } } return res; } }
classSolution{ publicintsearch(int[] nums, int target){ int lo = 0, hi = nums.length-1; while (lo<=hi) { int mid = (lo+hi)/2; if (nums[mid]==target) return mid; elseif (nums[lo]<=nums[mid]) { if (nums[lo]<=target&&nums[mid]>=target) hi=mid; else lo = mid+1; } else { if (nums[mid]<=target&&nums[hi]>=target) lo = mid; else hi = mid-1; } } return -1; } }
classSolution{ public List<Integer> spiralOrder(int[][] matrix){ ArrayList<Integer> res = new ArrayList<>(); if (matrix.length==0||matrix[0].length==0) return res; int m =matrix.length, n = matrix[0].length; // 利用左上角坐标(start, start)来标记圈数 int start = 0; while (start*2<m && start*2<n) { res.addAll(printCircle(matrix, m, n, start)); start++; } return res; }
public List<Integer> printCircle(int[][] matrix, int m, int n, int start){ ArrayList<Integer> res = new ArrayList<>(); int x = n-1-start, y = m-1-start; // left->right for (int i=start; i<=x; i++) { res.add(matrix[start][i]); } //top->bottom if (start<y) { for (int i=start+1; i<=y; i++) { res.add(matrix[i][x]); } } //right->left if (start<x && start<y) { for (int i=x-1;i>=start;i--) { res.add(matrix[y][i]); } } // bottom->top if (start<x && start<y-1) { for (int i=y-1;i>=start+1;i--) { res.add(matrix[i][start]); } } return res; } }