代码随想录二刷day01

这篇具有很好参考价值的文章主要介绍了代码随想录二刷day01。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


前言

使用左闭右闭区间的二分查找时, 最后low一定是被查找元素的插入位置,若查找的数带小数,low-1, 便是最终结果

一、704. 二分查找

1、左闭右闭

class Solution {
    public int search(int[] nums, int target) {
        int low = 0, high = nums.length-1, mid = 0;
        while(low <= high){
            mid = (low + high)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                low = mid + 1;
            }else{
                high = mid - 1;
            }
        }
        return -1;
    }
}

2、左闭右开文章来源地址https://www.toymoban.com/news/detail-657723.html

class Solution {
    public int search(int[] nums, int target) {
        int low = 0, high = nums.length, mid = 0;
        while(low < high){
            mid = (low + high)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                low = mid + 1;
            }else{
                high = mid;
            }
        }
        return -1;
    }
}

二、35. 搜索插入位置

class Solution {
    public int searchInsert(int[] nums, int target) {
        int low = 0, high = nums.length, mid;
        while(low < high){
            mid = (low + high)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                low = mid + 1;
            }else{
                high = mid;
            }
        }
        return low;
    }
}

三、34. 在排序数组中查找元素的第一个和最后一个位置

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int low = 0, high = nums.length, mid; int[] res = {-1, -1};
        while(low < high){
            mid = (low + high)/2;
            if(nums[mid] == target){
                res[0] = res[1] = mid;
                while(res[0]-1 >= 0 && nums[res[0] - 1] == target){
                    res[0] -= 1;
                }
                while(res[1] + 1 < nums.length && nums[res[1] + 1] == target){
                    res[1] += 1;
                }
                return res;
            }else if(nums[mid] < target){
                low = mid + 1;
            }else{
                high = mid;
            }
        }
        return res;
    }
}

四、69. x 的平方根

class Solution {
    public int mySqrt(int x) {
        int low = 0, high = x, mid;
        if(x == 0 || x == 1){
            return x;
        }
        while(low <= high){
            mid = (low + high)/2;
            if(x / mid == mid){
                return mid;
            }else if(x / mid > mid){
                low = mid +1;
            }else{
                high = mid -1;
            }
        }
        return low - 1;
    }
}

五、367. 有效的完全平方数

lass Solution {
    public boolean isPerfectSquare(int num) {
        int x = 1;
        while(num > 0){
            num -= x;
            x += 2;
        }
        return num == 0;
    }
}

六、27. 移除元素

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0, j = 0;
        for(;i < nums.length; ){
            if(nums[i] != val){
                nums[j] = nums[i];
                i ++; j ++;
            }else{
                i ++;
            }
        }
        return j;
    }
}

七、26. 删除有序数组中的重复项

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 1){
            return 1;
        }
        int i = 1, j = 0;
        for(; i < nums.length; ){
            if(nums[i] != nums[j]){
                nums[++j] = nums[i++];
            }else{
                i ++;
            }
        }
        return j + 1;
    }
}

八、283. 移动零

class Solution {
    public void moveZeroes(int[] nums) {
        int i = 0, j = 0, len = nums.length;
        if(len == 1)return;
        while(i < len){
            if(nums[i] != 0){
                nums[j] = nums[i];
                if(i == j){
                    i ++;
                }else{
                    nums[i++] = 0;
                }
                j ++;
            }else{
                i ++;
            }
        }
    }
}

九、844. 比较含退格的字符串

class Solution {
    public boolean backspaceCompare(String s, String t) {
        Deque<Character> deq1 = new ArrayDeque<>();
        Deque<Character> deq2 = new ArrayDeque<>();
        char[] ch1 = s.toCharArray();
        char[] ch2 = t.toCharArray();
        for(int i = 0; i < ch1.length; i ++){
            if(ch1[i] != '#'){
                deq1.offerFirst(ch1[i]);
            }else if(!deq1.isEmpty()){
                deq1.pollFirst();
            }
        }
        for(int j = 0; j < ch2.length; j ++){
            if(ch2[j] != '#'){
                deq2.offerFirst(ch2[j]);
            }else if(!deq2.isEmpty()){
                deq2.pollFirst();
            }
        }
        while(!deq1.isEmpty() && !deq2.isEmpty()){
            char c1 = deq1.pollFirst();
            char c2 = deq2.pollFirst();
            if(c1 != c2){
                return false;
            }
        }
        return deq1.isEmpty() && deq2.isEmpty();
    }
}

十、977. 有序数组的平方

class Solution {
    public int[] sortedSquares(int[] nums) {
        Deque<Integer> deq1 = new LinkedList<>();
        Deque<Integer> deq2 = new LinkedList<>();
        for(int i = 0; i < nums.length; i ++){
            if(nums[i] <= 0){
                deq1.offerLast(nums[i] * nums[i]);
            }else{
                deq2.offerLast(nums[i] * nums[i]);
            }
        }
        int k = 0;
        while(!deq1.isEmpty() && !deq2.isEmpty()){
            if(deq1.peekLast() <= deq2.peekFirst()){
                nums[k ++] = deq1.pollLast();
            }else{
                nums[k ++] = deq2.pollFirst();
            }
        }
        while(!deq1.isEmpty()){
            nums[k ++] = deq1.pollLast();
        }
        while(!deq2.isEmpty()){
            nums[k ++] = deq2.pollFirst();
        }
        return nums;
    }
}

到了这里,关于代码随想录二刷day01的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录二刷day48

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

    2024年02月07日
    浏览(81)
  • 二刷代码随想录——动态规划day40

    一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班,训练营为期60天,我一定能坚持下去,迎来两个月后的脱变的,加油! 推荐一手卡子哥的刷题网站,感谢卡子哥。代码随想录 终于来到了守关boss。

    2024年03月11日
    浏览(55)
  • 代码随想录day01

    ● 思维不难,主要是考察对代码的掌控能力 ● 内存中的存储方式:存放在连续内存空间上的相同类型数据的集合 ● 数组可以通过下标索引获取到下标对应的数据 ● 数组下标从0开始 ● 因为内存空间地址连续,因此删除或增加元素的时候,难免移动其他元素地址 ● Java中的

    2024年02月13日
    浏览(53)
  • 代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    哈希表能解决什么问题呢?一般哈希表都是用来快速判断一个元素是否出现集合里。 242.有效的字母异位词 题目链接 解题思路: 题目的意思就是 判断两个字符串是否由相同字母组成。 字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

    2024年02月07日
    浏览(47)
  • 代码随想录 day38 第九章 动态规划part01

    ●  理论基础 ●  509. 斐波那契数 ●  70. 爬楼梯 ●  746. 使用最小花费爬楼梯 理论基础 解决动态规划必须要想清楚的点 dp数组以及下标的含义 递推公式 dp数组如何初始化 遍历顺序 打印数组 检查结果 关联 leetcode 509. 斐波那契数 思路 动规五部曲 dp数组以及下标的含义

    2024年04月17日
    浏览(48)
  • 代码随想录Day1 | 数组01- leetcode 704、27

    题目链接:二分查找 关键问题:         - 边界(left、right)、当前查找值(middle)                 - target大于当前查找值 -- 当前查找区域的右边,更改区间left                 - target小于当前查找值 -- 当前查找区域的左边,更改区间right                 - middle的计

    2024年02月16日
    浏览(43)
  • 代码随想录Day3 | 链表01-leetcode203、707、206

    题目链接:移除链表元素 思路: 链表中元素的添加和删除关键是要 保证不断链且指向关系正确 。对于删除操作,链的修改涉及将待删除元素的前一个元素指向待删除元素的后一个元素,因此在判断当前元素是否需要删除时,要记录当前元素的前后指针。 1.删除头结点时另作

    2024年02月16日
    浏览(63)
  • 代码随想录二刷 |回溯 |分割回文串

    131.分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ] 回溯三部曲 递归函数参数 全局变量数组path存放切割后回文的子串,二维数组result存放结果集 参数

    2024年01月24日
    浏览(72)
  • 代码随想录二刷-哈希表-几数之和 (JS)

    题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果

    2023年04月18日
    浏览(38)
  • 代码随想录day24 开启回溯算法

    感觉回溯算法其实和递归很像,也是用递归的做法,也有三部曲,但又不太一样的地方是递归中类似二叉树,只有纵向遍历(一层层往下遍历,没有横向遍历),而回溯算法中多的for循环就是横向遍历,说实话这一点我没有理解的太深,只是知道它类似于两个for循环中的第一

    2024年01月16日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包