LeetCode之Shortest Unsorted Continous Subarray

在这里插入图片描述
题目大意:将给定的数组从小到大排序,找出最短的需要进行位置变换的子数组的长度
1、找到子数组起始的位置和结束位置
2、最小长度=结束位置-起始位置+1

public  static int findUnsortedSubarray(int[] nums) { 
//如果数组不存在或为空  寻找最短的与要重新排序的子列没有意义 直接返回0
		 if(nums==null||nums.length==0) {
			 return 0;
		 }
/*设置起始位置和结束位置的的初始值  discuss里面选的是start=-1  end=-2
 * 个人觉得这个可以随意取  至于要保证end-start+1=0 即end-start=-1就可以了
 * 不过为了不与数组的下标混在一起 最好选负数
 * 注意一点 如果end变了 start绝对也会变的
 */
	       int start=-3;
	       int end=-2;
 /*设置数组中的最大值  因为最后要求数组从小到大排列 所以从左往右依次比较寻找最大值  
 确定end  默认第一个值为最大值
*/
	       int max=nums[0];
 //同理从右往左依次比较 寻找最小值 确定start  默认最后一个为最小值  
	       int min=nums[nums.length-1];
	       
	       for(int i=1;i<nums.length;i++) {
 /*从左往右 当然是希望一个比一个大  这样end就不需要改变 ,start也不会变
    需要重新排列的子列长度就是-1+1=0
 */
	    	   max=Math.max(nums[i],max);
	    	   
  /*如果nums[i]小于最大值 其实也就是小于前一个值了  例如1 3 4 5 2... 
  这时候的end就必须变成4了
  数组下标为4的位置上的“2”肯定是要移动位置重新排的
*/
	    	   if(nums[i]<max) {
	    		   end=i;
	    	   }
	    	   
	    	   
	       }
	 //从数组的右边开始 寻找start
	       for(int i=nums.length-2;i>=0;i--) {
  /* 1 2 3 4... 从右往左 如果都比右边的最小数小(其实就是左边的数依次比右边的小)
     start就不需要改变
*/
	    	 min=Math.min(nums[i], min);
//如果 1 2 3 5 4...很明显5比4大  start就是下标3
	    	 if(nums[i]>min) {
	    		 start=i;
	    	 }
	    			 
	       }
	       
	    return end-start+1;   
	      
	    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值