每周总结2021-07-10

从快期末考试的一个月到期末结束后的几天,差不多已经一个多月没有碰过java了,很多以前学的东西也忘记了。这一个星期差不多就是复习一下以前学过的东西,但是学习资源太多了,这几天基本是这个看一点,那个看一点。每个资料讲的顺序也不一样,所以复习起来太琐碎了。几天下来,感觉没学多少东西。

        现在大概把基本数据类型、数组、类、各种数据的包装类、stringbuilder、修饰符、继承一些基本的知识过了一遍吧。学习感悟的话,光是看书或者是视频的话,感觉还是太无聊了,看不下去。所以看完一个知识点就对应的写一些demo,会更好,然后再去写一些算法题。当然很多算法题不会写很正常。先用笨方法写一遍,在去看看别人的解题思路(不要看代码),然后再自己根据思路去写一遍,再和别人的代码看一看有什么不同吧。以下是最近做的几个算法题

/*二分查找
 * 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
 */
class Solution {
    public int searchInsert(int[] nums, int target) {
        int left=0,right=nums.length-1,mid=0;
        
        while(left<=right) {
        	 mid=(int)Math.round((left+right)/2.0);//第一次错了,没注意整数/整数还是整数;round返回的是一个long型(因为2.0默认是double型),要强制转换
        	if(target<numsmid]) {
        		right=mid-1;
        		
        	}
        	else if(target>nums[mid]){
        		if(left==right) {
        			mid++;
        		}
        		left=mid;
        	}
        	else {
        		
        		break;
        	}
        } 
        return mid;	
    }
}
双指针
/*给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]


 */
class Solution {
    public int[] sortedSquares(int[] nums) {
    	int n=nums.length;
    	int i=0,j=n-1,k=1;
    	int []arr=new int [n];
    	while(i<=j) {
    		if(nums[i]*nums[i]<nums[j]*nums[j]) {
    			arr[n-k]=nums[j]*nums[j];
    			j--;
    		}
    		else {
    			arr[n-k]=nums[i]*nums[i];
    			i++;
    		}
    		k++;
    	}
    	return arr;
    }
}
/*双指针
 * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:

    尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
    你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
*/
class Solution2 {
    public void rotate(int[] nums, int k) {
    	int n=nums.length;
    	int m=k%n;
    	reverse(nums,0,n-1);
    	reverse(nums,0,m-1);
    	reverse(nums,m,n-1);
    	
    }
     int[] reverse(int []nums,int i,int j){
    	while(i<j) {
    		int temp=nums[i];
    		nums[i]=nums[j];
    		nums[j]=temp;
    		i++;
    		j--;
    	}
    	return nums;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值