三道经典面试算法题详解

❤写在前面
❤博客主页:努力的小鳴人
❤系列专栏:面试 算法
❤欢迎小伙伴们,点赞关注收藏一起学习!
❤如有错误的地方,还请小伙伴们指正!

题目一

输入一个矩阵,按照从里到外以顺时针的顺序依次打印出每一个数字
例:
三道经典面试算法题详解_第1张图片
则依次输出:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10

public class testClockwiseOutput {
    //顺时针打印矩阵
    @Test
    public void Test1(){
        int[][] num = new int[100][100];
        int n = 6;
        int count =1;
        
        for(int i=0;i<n;i++){
            for(int j =0;j<n;j++){
                num[i][j]=count++;
            }
        }
        output(num,0,n-1);
    }
   
    
    public void output(int[][] num,int start,int end){
        if(start>end || end<=0)return;
        for(int i=start;i<=end;i++){
            System.out.println(num[start][i]);
        }
        for(int i=start+1;i<=end;i++){
            System.out.println(num[i][end]);
        }
        
        for(int i=end-1;i>=start;i--){
            System.out.println(num[end][i]);
        }
        for(int i=end-1;i>start;i--){
            System.out.println(num[i][start]);
        }
        
        output(num,start+1,end-1);
    }
}

题目二

已排序好的一个数组和一个数,求数组中连续元素的和等于所给数的子数组


	@Test
    public void Test2(){
        int[] num = {1,2,2,3,4,5,6,7,8,9};
        int sum = 7;
        findSum(num,sum);
    }
    
    
    public void findSum(int[] num,int sum){
        int left=0;
        int right=0;
        
        for(int i=0;i<num.length;i++){
            int curSum = 0;
            left = i;
            right = i;
            while(curSum<sum){
                curSum += num[right++];
            }            
            if(curSum==sum){
                for(int j=left;j<right;j++){
                    System.out.print(num[j]+" ");
                }
                System.out.println();
            }
        }
    }

题目三

输入一个整型数组(数可正可负),数组中一个或者多个整数组成一个子数组,求所有子数组的最大值,要求时间复杂度为O(n)


	//子数组最大和
    @Test
    public void test(){
        int[] num = {1,-2,3,10,-4,7,2,-5};
        //int[] num = {1,-2,3,10,-4,10,2,-5};
        System.out.println(maxSum(num));
    }
    
    
    public int maxSum(int[] num){
        int curSum = 0;
        int curMaxSum = -99999999;
        int start = 0;
        int end = 0;
        
        for(int i=0;i<num.length;i++){
            if(curSum<=0){
                curSum = num[i];
                start = i;
            }
            else{
                curSum += num[i];
            }
            if(curSum>curMaxSum){
                curMaxSum = curSum;        
                end = i;
            }
        }    
        for(int i = start;i<=end;i++){
            System.out.println(num[i]);
        }
        return curMaxSum;
    }

总结:这三道作为我学习算法的开始吧!
作者算是一名Java爱好者,文章如有错误,欢迎评论私信指正,一起学习~~
如果文章对小伙伴们来说有用的话,点赞关注收藏就是我的最大动力!
不积跬步,无以至千里书接下回,欢迎再见

你可能感兴趣的:(算法,面试,算法,面试,职场和发展)