首页 > 编程语言 >代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、977.有序数组的平方。

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、977.有序数组的平方。

时间:2024-09-26 16:36:07浏览次数:8  
标签:977 left nums int 随想录 vector 移除 newQ size

704.二分查找

总结:
防止int溢出:

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<=right){
            int middle=(left+right)/2;//int mid = (right - left) / 2 + left;
            if(target<nums[middle]){
                right=middle-1;
            }
            else if(target>nums[middle]){
                left=middle+1;
            }
            else return middle;
        }
        return -1;
    }
};

(right - left) / 2 + left 是一种常见的技巧,确保计算数组中间索引时不会因为加法导致整数溢出,特别是在处理非常大的数组边界时非常有用。

27.移除元素

总结:使用快慢指针

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int fast=0,slow=0;
        for(fast;fast<nums.size();fast++){
            if(nums[fast]!=val){
                nums[slow]=nums[fast];
                slow++;
            }
        }
        return slow;
    }
};

使用快慢指针,快指针获得当下不等于val的值,并将其值赋给慢指针。

977.有序数组的平方

总结:使用双向指针

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int j=nums.size()-1;
        int k=nums.size()-1;
        vector<int> newQ(nums.size());
        for(int i=0;i<=j;){
            if(nums[i]*nums[i]>nums[j]*nums[j]){
                newQ[k--]=nums[i]*nums[i];
                i++;
            }
            else{
                newQ[k--]=nums[j]*nums[j];
                j--;
            }
        }
        return newQ;
    }
};

注意vector记得初始化,否则为0;

标签:977,left,nums,int,随想录,vector,移除,newQ,size
From: https://www.cnblogs.com/VickyWu/p/18433663

相关文章

  • Luogu_P10977(AcWing_299) Cut the Sequence 题解
    解题思路考虑线性dp。首先如果存在\(a_i>m\),那肯定不满足条件,输出\(-1\)。设\(f_i\)表示前\(i\)个数分成若干段,然后每段最大数之和,其中每段内的整数之和不超过\(m\)。\(f_i\)肯定是由\(f_j\)(\(1\lej<i\))转移过来的,也就是前\(j\)个数分好后再加上\((j,i]\)这一......
  • 【代码随想录Day27】贪心算法Part01
    理论基础题目链接/文章讲解:代码随想录视频讲解:贪心算法理论基础!_哔哩哔哩_bilibili455.分发饼干题目链接/文章讲解:代码随想录视频讲解:贪心算法,你想先喂哪个小孩?|LeetCode:455.分发饼干_哔哩哔哩_bilibili一开始使用了双重循环,时间复杂度为......
  • 【代码随想录Day25】回溯算法Part04
    491.递增子序列题目链接/文章讲解:代码随想录视频讲解:回溯算法精讲,树层去重与树枝去重|LeetCode:491.递增子序列_哔哩哔哩_bilibiliclassSolution{List<List<Integer>>result=newArrayList<>();LinkedList<Integer>path=newLinkedList<>();pub......
  • iOS 18 電筒新功能:可以移除鎖屏捷徑!Pro 款獨享聚光、柔光模式?
    手電筒功能在iPhone上面存在已久,除了能為大家帶來一點光明之外,還有時候會因為誤觸而造成尷尬局面(當事人不自知居多了)。來到iOS18,Apple一口氣對這個低調實用小工具帶來多項改革!一是把原本固定的鎖屏小工具加入自定化,讓大家可以把左右兩個快捷鍵換成更想用的app,或者乾脆移......
  • 代码随想录算法训练营Day13 | 递归遍历、迭代遍历、层序遍历
    目录递归遍历和迭代遍历:144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后序遍历层序遍历:102.二叉树的层序遍历107.二叉树的层序遍历Ⅱ199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧......
  • 移除苹果iCloud激活锁 | 移除苹果ID锁
    iOS18更新之后,新增了一个功能,为苹果设备的零件也增加激活锁。如果你的苹果设备之前在非官方的维修店里检修过,重置手机之后就有可能遇到类似的激活锁。目前除了找苹果官方替换这个部件还没有其他其他解决方法。但是对于之前那种类型的激活锁,还是有方法的进行绕过的。Joyoshar......
  • leecode203-移除链表元素
    文章目录题目解题方法1题目给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head......
  • LeetCode力扣——并查集:947. 移除最多的同行或同列石头,1971. 寻找图中是否存在路径,24
    947.移除最多的同行或同列石头题目描述947.移除最多的同行或同列石头n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n 的数组 stones ,其......
  • 【代码随想录Day24】回溯算法Part03
    93.复原IP地址题目链接/文章讲解:代码随想录视频讲解:回溯算法如何分割字符串并判断是合法IP?|LeetCode:93.复原IP地址_哔哩哔哩_bilibiliclassSolution{List<String>result=newArrayList<>();LinkedList<String>path=newLinkedList<>();publicL......
  • 移除链表元素
    移除链表元素思路:1.首先判断链表是否为空,若为空直接返回head(null)2.若链表不为空,让prev记住要删除节点的前一个位置,cur指向要删除的元素位置,若cur指向的val==要删除的值,就让prev.next指向cur.next3.因为cur是从head的下一个节点位置开始判断的,就没有判断头节点是否为要......