代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、704. 二分查找
  • 二、27. 移除元素
  • 三、剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  • 总结


前言

进入代码随想录的第一天,希望能够坚持下来,除了任务之外,每天刷两三道新题。之前是用IDEA刷的,有一些自动补全功能,现在直接在leetcode平台上刷题,提高对函数的熟练度。


提示:以下是本篇文章正文内容,下面案例可供参考

一、704. 二分查找

  • 二分法是针对于有序数组的
  • mid溢出问题
int mid = (left+right)/2;//?

如果left+right大于int型的上限,就会产生溢出问题
所以写成mid=left+(right-left)/2;或mid=left+(right-left)>>1;

   public int search(int[] nums, int target) {
       int left = 0;
       int right = nums.length-1;
       while(left<=right){
           // int mid = (left+right)/2;//?
           int mid=left+(right-left)/2;
           if (target>nums[mid]){
               left++;
           } else if (target<nums[mid]){
               right--;
           } else{
               return mid;
           }
       }
       return -1;
   }

用时6分钟

二、27. 移除元素

双指针法:通过两个指针在一个for循环中,完成两个for循环的作用
在for循环里的逻辑上卡了一些时间。判断,值如果不相等,那么他就是这个数组中的元素。
容易混的点:

  1. slow指针先移位后赋值还是先赋值后移位。
  2. 判断的是值相等还是值不相等。
    public int removeElement(int[] nums, int val) {
        //双指针
        int slow = 0;
        // int fast = 0;
        for(int fast=0;fast<nums.length;fast++){
            if(nums[fast]!=val){//?
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }

用时9分钟

三、剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

双指针法:慢指针指向更新 新数组下标的位置,快指针是找奇元素。
简单说,就是快指针找到了奇元素,就和慢指针的元素互换位置。

一些自己想的问题:
代码只是保证了奇数在偶数前面,但顺序不是原数组的顺序
比如:输入[1,2,3,4,6,7,8,10,11],输出:[1,3,7,11,6,2,8,10,4],6跑2前了。
会把奇数换到后面吗?不会
慢指针都是指向偶数才换的吗?对的,如果是奇数的话,快指针早就换了

有点想多了,其实只用考虑我把遇到的奇数都换到前面去,别的不用考虑。

    public int[] exchange(int[] nums) {
        int slow = 0;//存放元素 
        // int fast = 0;//找到奇数
        for(int fast=0;fast<nums.length;fast++){
            // System.out.println(fast);
            if (nums[fast]%2==1){
                int temp = nums[slow];
                nums[slow] = nums[fast];
                nums[fast] = temp;
                slow++;
            }
        }
        return nums;
	}

46分钟,和上面题很像,时间久了


总结

多加练习,勤于思考

你可能感兴趣的:(算法,数据结构,java)