package org.example.interview.practice; /** * @author xianzhe.ma * @date 2021/8/14 */ public class NC_18_ROTATEMATRIX { public int[][] rotateMatrix(int[][] mat, int n) { // write code here // 对角线 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { int temp = mat[i][j]; mat[i][j] = mat[j][i]; mat[j][i] = temp; } } // 以竖轴翻转 for (int i = 0; i < n; i++) { for (int j = 0; j < n / 2; j++) { int temp = mat[i][j]; mat[i][j] = mat[i][n - 1 - j]; mat[i][n - 1 - j] = temp; } } return mat; } }
package org.example.interview.practice; /** * @author xianzhe.ma * @date 2021/8/31 */ public class NC_19_maxsumofSubarray { public static int maxsumofSubarray(int[] arr) { // write code here //存放临时答案 int thisSum = 0; //存放最终答案,注意初始化的值 int ans = Integer.MIN_VALUE; int len = arr.length; for (int i = 0; i < len; i++) { //累加求和 thisSum += arr[i]; if (thisSum > ans) { ans = thisSum; } //贪心,负数必然会拉低序列和 if (thisSum < 0) { thisSum = 0; } } return ans; } public static int maxsumofSubarray2(int[] arr) { // write code here int sum = 0; int max = Integer.MIN_VALUE; for (int value : arr) { sum = sum + value; if (sum > max) { max = sum; } if (sum < 0) { sum = 0; } } return max; } public static void main(String[] args) { int[] arr = {1, 2, -99, 5, -5}; System.out.println(maxsumofSubarray2(arr)); } }
package org.example.interview.practice; import java.util.ArrayList; /** * @author xianzhe.ma * @date 2021/8/31 */ public class NC_20_restoreIpAddresses { /** * * @param s string字符串 * @return string字符串ArrayList */ public ArrayList<String> restoreIpAddresses (String s) { // write code here ArrayList<String> list=new ArrayList<>(); if(s.length()==0)return list; backTrack(s,0,3,list); return list; } //i:本次插入的起始位置 cnt:剩余可插入'.'的次数 public void backTrack(String s,int i,int cnt,ArrayList<String> list){ if(cnt==0){ String[] strs=s.split("\\."); //'.'要转义 if(strs.length<4)return ; //保证插入得到4个子串,不会出现多个'.'相连的情况 for(String str:strs){ if(str.length()>1&&str.charAt(0)=='0')return ; //排除有前导0的情况 if(Integer.parseInt(str)<0||Integer.parseInt(str)>255)return ; //排除不在范围的情况 } list.add(s); return ; } if(i>=s.length())return ; //没插完就结束的情况 int n=s.length(); backTrack(s.substring(0,i+1)+"."+s.substring(i+1,n),i+2,cnt-1,list); //插入到1个字符之后 if(i+2<n)backTrack(s.substring(0,i+2)+"."+s.substring(i+2,n),i+3,cnt-1,list); //插入到2个字符之后 if(i+3<n)backTrack(s.substring(0,i+3)+"."+s.substring(i+3,n),i+4,cnt-1,list); //插入到3个字符之后 } }