- 旋转图像:https://leetcode-cn.com/problems/rotate-image/submissions/
class Solution { public void rotate(int[][] matrix) { if(matrix.length == 0 || matrix[0].length == 0){ return; } //先上下翻转 for(int i=0;i<matrix.length/2;i++){ int[] temp = matrix[i]; matrix[i] = matrix[matrix.length-i-1]; matrix[matrix.length-i-1] = temp; } //对角翻转 for(int i=0;i<matrix.length;i++){ for(int j=0;j<i;j++){ int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } }
旋转数组:https://leetcode-cn.com/problems/rotate-array/submissions/
class Solution { public void rotate(int[] nums, int k) { //k对len取余,得到最小的旋转次数 k = k%nums.length; //先整个数组翻转一次 swap(nums,0,nums.length-1); //翻转前k-1个 swap(nums,0,k-1); //翻转剩余的 swap(nums,k,nums.length-1); } public void swap(int[] nums,int left,int right){ while(left < right){ int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; left++; right--; } } }
除自身外的乘积:https://leetcode-cn.com/problems/product-of-array-except-self/comments/
class Solution { public int[] productExceptSelf(int[] nums) { if(nums.length == 0){ return new int[0]; } int[] result = new int[nums.length]; //初始化left为1,从左往右搜索,result不叠乘left int left = 1; for(int i=0;i<nums.length;i++){ result[i] = left; left *= nums[i]; } //初始化right为1,从右往左搜,result叠乘right int right = 1; for(int i=nums.length-1;i>=0;i--){ result[i] *= right; right *= nums[i]; } return result; } }
找到所有消失的数:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/submissions/
class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> result = new ArrayList<>(); //nums[i]作为temp数组的索引,设置为1,然后遍历temp数组,temp[i]为0时,存入i到list int[] temp = new int[nums.length+1]; for(int i=0;i<nums.length;i++){ temp[nums[i]] = 1; } for(int i=1;i<temp.length;i++){ if(temp[i] == 0){ result.add(i); } } return result; } }
有序矩阵中第K小的元素:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/submissions/
class Solution { public int kthSmallest(int[][] matrix, int k) { if(matrix.length == 0 || matrix[0].length == 0){ return 0; } //降维 int[] result = Merge(matrix,0,matrix.length-1); return result[k-1]; } public int[] Merge(int[][] matrix,int start,int end){ if(start == end){ return matrix[start]; } int middle = start + (end - start)/2; //分割成左右两个数组 int[] left = Merge(matrix,start,middle); int[] right = Merge(matrix,middle+1,end); //合并左右数组 return MergeSort(left,right); } public int[] MergeSort(int[] nums1,int[] nums2){ int[] temp = new int[nums1.length + nums2.length]; int index = 0; int index1 = 0; int index2 = 0; while(index1 < nums1.length && index2 < nums2.length){ if(nums1[index1] < nums2[index2]){ temp[index++] = nums1[index1++]; }else{ temp[index++] = nums2[index2++]; } } while(index1 < nums1.length){ temp[index++] = nums1[index1++]; } while(index2 < nums2.length){ temp[index++] = nums2[index2++]; } return temp; } }
把数组排成最小的数:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/