当前位置:   article > 正文

刷题6:热题100

刷题6:热题100

  1. class Solution {
  2. public int[] productExceptSelf(int[] nums) {
  3. int[] dpleft = new int[nums.length];
  4. int[] dpright = new int[nums.length];
  5. int[] answer = new int[nums.length];
  6. dpleft[0] = 1;
  7. dpright[nums.length-1] = 1;
  8. for (int i=1;i<nums.length;i++){
  9. dpleft[i] = dpleft[i-1]*nums[i-1];
  10. }
  11. for (int i=nums.length-2;i>=0;i--){
  12. dpright[i] = dpright[i+1]*nums[i+1];
  13. }
  14. for (int i=0;i<nums.length;i++){
  15. answer[i] = dpleft[i] * dpright[i];
  16. }
  17. return answer;
  18. }
  19. }

  1. class Solution {
  2. public int firstMissingPositive(int[] nums) {
  3. //最小正整数只能在【1,nums.length+1】中间出现
  4. //将数组当成map看待
  5. // 给每一个负数元素打上标记:只要是不影响后面的标记就行,可以大于等于nums.length+1
  6. for (int i=0;i<nums.length;i++){
  7. if (nums[i]<=0){
  8. nums[i] = nums.length+1;
  9. }
  10. }
  11. // 给数组中在【1,nums.length】区间的元素打上标记
  12. // 每个数组(i)下标+1,代表正整数(i+1)
  13. // 如果有i+1的值的正整数,则下标i的数组元素打为负数
  14. for (int i=0;i<nums.length;i++){
  15. int num = Math.abs(nums[i]);
  16. if (num<=nums.length){
  17. nums[num-1] = -Math.abs(nums[num-1]);
  18. }
  19. }
  20. // 找到第一个不为负数的元素,记住下标i,则i+1即未不存在的正整数
  21. for (int i=0;i<nums.length;i++){
  22. if (nums[i]>0){
  23. return i+1;
  24. }
  25. }
  26. // 如果【1,nums.length】都具有,即下标【0,nums.length-1】元素都打了标记
  27. // 则返回之后的下一个正整数
  28. return nums.length+1;
  29. }
  30. }
  1. class Solution {
  2. public int firstMissingPositive(int[] nums) {
  3. // 置换元素,匹配正整数和元素下标
  4. // 找到在区间【1,nums.length】的元素,将该元素与下标相对应的元素交换
  5. for (int i=0;i<nums.length;i++){
  6. while(nums[i]>0 && nums[i]<=nums.length && nums[nums[i]-1]!=nums[i]){
  7. int temp = nums[nums[i]-1];
  8. nums[nums[i]-1] = nums[i];
  9. nums[i] = temp;
  10. }
  11. }
  12. // 找到置换之后的数组中,元素与下标不符合的第一个下标,即为最小正整数-1
  13. for (int i=0;i<nums.length;i++){
  14. if (nums[i]!= i+1){
  15. return i+1;
  16. }
  17. }
  18. return nums.length+1;
  19. }
  20. }

  1. class Solution {
  2. public void setZeroes(int[][] matrix) {
  3. boolean[] flagrow = new boolean[matrix.length];
  4. boolean[] flagcol = new boolean[matrix[0].length];
  5. for (int i=0;i<matrix.length;i++){
  6. for (int j=0;j<matrix[0].length;j++){
  7. if (matrix[i][j]==0){
  8. flagrow[i] = true;
  9. flagcol[j] = true;
  10. }
  11. }
  12. }
  13. for (int i=0;i<matrix.length;i++){
  14. for (int j=0;j<matrix[0].length;j++){
  15. if (flagrow[i] || flagcol[j]){
  16. matrix[i][j] = 0;
  17. }
  18. }
  19. }
  20. }
  21. }

  1. class Solution {
  2. public List<Integer> spiralOrder(int[][] matrix) {
  3. int m = matrix.length;
  4. int n = matrix[0].length;
  5. List<Integer> result = new ArrayList<>();
  6. int up = 0, down = m-1;
  7. int left = 0, right = n-1;
  8. while(true){
  9. //left--right
  10. if (left>right) break;
  11. for (int i=left;i<=right;i++){
  12. result.add(matrix[up][i]);
  13. }
  14. up++;
  15. //up--down
  16. if (up>down) break;
  17. for (int i=up;i<=down;i++){
  18. result.add(matrix[i][right]);
  19. }
  20. right--;
  21. //right--left
  22. if(right<left) break;
  23. for (int i=right;i>=left;i--){
  24. result.add(matrix[down][i]);
  25. }
  26. down--;
  27. //down--up
  28. if(down<up) break;
  29. for (int i=down;i>=up;i--){
  30. result.add(matrix[i][left]);
  31. }
  32. left++;
  33. }
  34. return result;
  35. }
  36. }

  1. class Solution {
  2. public void rotate(int[][] matrix) {
  3. int n=matrix.length;
  4. for (int i=0;i<n/2;i++){
  5. for (int j=0;j<n;j++){
  6. int temp = matrix[i][j];
  7. matrix[i][j] = matrix[n-1-i][j];
  8. matrix[n-1-i][j] = temp;
  9. }
  10. }
  11. for (int i=0;i<n;i++){
  12. for (int j=0;j<i;j++){
  13. int temp = matrix[i][j];
  14. matrix[i][j] = matrix[j][i];
  15. matrix[j][i] = temp;
  16. }
  17. }
  18. }
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/305988
推荐阅读
相关标签
  

闽ICP备14008679号