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

 704. 二分查找

题目链接:https://leetcode.cn/problems/binary-search/

1,左闭右闭
class Solution {
    public int search(int[] nums, int target) {
        //左闭右闭就是left <= right, left and right 都要加1或者减1
        if(target < nums[0] || target > nums[nums.length - 1]){
            return -1;
        }

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

  2. 左闭右开

复制代码
class Solution {
public int search(int[] nums, int target) {
//左闭右开就是left < right, left要加1,但是right不减1length 位移动的时候也不减1
if(target < nums[0] || target > nums[nums.length - 1]){
return -1;
}

int left = 0;
int right = nums.length;
while(left < right){
int mid = left +((right - left) >> 1);
if(nums[mid] == target){
return mid;
}
else if(target < nums[mid]){
right = mid;
} else {
left = left +1;
}
}
return -1;
}
}
复制代码

 

 
27. 移除元素
题目链接:https://leetcode.cn/problems/remove-element/ 

暴力的解法:

复制代码
    public static int deleteNum1(int[] arr, int deleteNum) {
        int size = arr.length;

        for (int i = 0; i < size; i++) {
            if (arr[i] == deleteNum) {
                for (int j = i + 1; j < size; j++) { 
                    arr[j - 1] = arr[j];
                }
                i--;  
                size--; 
            }
        }

        return size;
    }
复制代码

 

双指针法:

复制代码
class Solution {
    public int removeElement(int[] nums, int val) {
        //双指针一起走。如果相同就不同赋给slow,不同才赋给slow,然后slow++
        int slow = 0;
        for (int fast = 0; fast < nums.length; fast++){
             if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
             }
        }
        return slow;

    }
}
复制代码

977.有序数组的平方

暴力解法:循环一次,然后排序;

复制代码
class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length;
        for(int i = 0; i < len; i++){
            nums[i] = nums[i] * nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }
}
复制代码

 

 双指针:建一个新的数组,倒着放最大的结果。只需要遍历一次。

复制代码
class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] result = new int[nums.length];
        int left = 0;
        int right = nums.length -1;
        int last = result.length -1;
        while(left <= right){
            if(nums[left] * nums[left] > nums[right] * nums[right]){
                result[last--] = nums[left] * nums[left];
                left++;
            } else {
                result[last--] = nums[right] * nums[right];
                right--;
            }
        }
        return result;
    }
}
复制代码

 

 

 

posted @   爱刷题的小盒子  阅读(300)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示