首页 > 其他分享 >day2

day2

时间:2022-10-27 21:46:42浏览次数:27  
标签:newNums return nums int day2 ++ numsLength

  1. [0027移除元素]

    class Solution {
        public int removeElement(int[] nums, int val) {
            int slowIndex = 0;
            int fastIndex = 0;
            int numsLength = nums.length;
            for(fastIndex = 0; fastIndex <= numsLength-1; fastIndex++){
                if(nums[fastIndex] != val){
                    //nums[slowIndex++] = nums[fastIndex];
                    nums[slowIndex] = nums[fastIndex]; 
                    slowIndex ++;              
                } 
            }
            return slowIndex;
        }
    }
    
    • fastIndex先探访原数组中的每一个元素是否为目标元素,若是则自增后继续探访下一个元素,若不是则由slowIndex取值并同FastIndex一起自增;
  2. [0977有序数组的平方]

    class Solution {
        public int[] sortedSquares(int[] nums) {
            int slowIndex = 0;
            int fastIndex = 0;
            int numsLength = nums.length;      
            int [] newNums = new int[numsLength];
            for (int i = 0; i < numsLength; i++){
                if(nums[i] <= 0)
                    fastIndex = i;
                newNums[i] = nums[i] * nums[i];
            }      
            newNums[0] = nums[fastIndex]*nums[fastIndex];
            int a = fastIndex-1;
            int b = fastIndex+1;
            for(int i = 1; i < numsLength; i++){
                if(a < 0 || b > numsLength)
                    break;
                if(nums[a]*nums[a] < nums[b]*nums[b]){
                    newNums[i] = nums[a]*nums[a];
                    a--;
                }
                else{
                    newNums[i] = nums[b]*nums[b];
                    b++;
                }
            }
            return newNums; 
        }
    }
    
    • 饶了那么多,就是想避开一次for循环赋值和一边排序(可选快排),但双指针还是没用对,不该先定最小的元素值,它在数组中间啊,怎么能有两端点值好找呢,不好找也罢,关键是两个移动的指针就没那么容易了,因为向两边移动会停止、会越界。
    class Solution {
        public int[] sortedSquares(int[] nums) {
            int numsLength = nums.length;
            int i = 0;
            int j = numsLength-1;
            int [] newNums = new int [numsLength];
            for (int k = 0; k <= nums.length-1; k++){
                if (nums[i] * nums[i] >= nums[j] * nums[j]){
                    newNums[numsLength - k] = nums[i]; 
                    i++;
                }
                else{
                    newNums[numsLength - k] = nums[j];
                    j--;
                }
            }
            return newNums;
        }
    }
    
    • 看懂思想了,但还是运行不成功,因为指针变量太绕了。。。
    class Solution {
        public int[] sortedSquares(int[] nums) {
            int numsLength = nums.length;
            int i = 0;
            int j = numsLength - 1;
            int k = numsLength - 1;
            int [] newNums = new int [numsLength];
            while(i <= j){
                if (nums[i] * nums[i] >= nums[j] * nums[j]){
                    newNums[k--] = nums[i] * nums[i]; 
                    i++;
                }
                else{
                    newNums[k--] = nums[j] * nums[j];
                    j--;
                }
            }
            return newNums;
        }
    }
    
    • 可以说是照抄了一遍。。。不得不说,相比于for循环,while不太会灵活运用。
  3. [0209长度最小的子数组]

    class Solution {
        public int minSubArrayLen(int target, int[] nums) {
            int numsLength = nums.length;
            for (int k = 0; k <= numsLength-1; k++){
                int sum = 0;
                int i = 0;
                int j = i + k;
                while (j <= numsLength-1){
                    for(int temp = i; temp <= j; temp++){
                        sum = sum + nums[temp];
                    }      
                    if (sum >= target)
                        return k+1; 
                    i++;
                    j++;
                }
            }
            return 0;
        }
    }
    
    • 确实看到提示说是用滑动窗口代替两个for循环,但调节滑动窗口的起始位置这部分精髓代码比较蒙''''''''''
      明天继续:)

标签:newNums,return,nums,int,day2,++,numsLength
From: https://www.cnblogs.com/deservee/p/16834101.html

相关文章

  • day21.内容回顾及总结
    前端体系结构及知识点一阶段(html+css)基础的页面布局(div弹性盒子布局)seo优化(搜索引擎优化)动画效果html5和css3多端适配(rem)二阶......
  • 《渗透测试》学习随笔 day2
    数据包拓展1.HTTP/HTTPS(1)HTTP与HTTPS协议HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之......
  • 代码随想录day22 | 235. 二叉搜索树的最近公共祖先 701. 二叉搜索树中的插入操作 45
    235.二叉搜索树的最近公共祖先题目|文章思路在二叉树公共祖先问题中,可以通过后序遍历,从二叉树节点向上遍历,找到最近公共祖先。本题中我们可以利用二叉搜索树的特性对......
  • day23hashlib加密模块
    hashlib加密模块subprocess模块logging日志模块软件开发主要流程ATM项目分析hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2.为什么加密 ......
  • day21 线程终止与休眠
    线程停止让线程正常停止利用循环不能死循环使用标志位设置标志位不用stop函数和destroy1publicclassTestStopimplementsRunnable{2​3//1......
  • day20 闭包和promise
    闭包(Closure)概述:闭包就是函数嵌套函数,内部函数可以引用外部函数的变量和参数,并且不会被垃圾回收机制所回收.这种结构就称为闭包.函数的生命周期func......
  • day20闭包和promise
    闭包概述:在函数内返回一个函数(函数嵌套函数),内部函数有外部函数的引用。函数的生命周期函数的预编译阶段:1.开辟一个内存空间2.将对应的代码放到这个内存空间函数的执......
  • day22爬虫
    第三方模块的下载与使用网络爬虫模块之requests模块网络爬虫实战之爬取链家二手房数据自动化办公领域之openpyxl模块今日内容详细作业讲解"""网络爬虫没有我们......
  • 代码随想录day21 | 530.二叉搜索树的最小绝对差 501. 二叉搜索树中的众数 236. 二叉
    530.二叉搜索树的最小绝对差题目|文章思路二叉搜索树的特点是按照中序遍历从小到大进行排列,因此,按照中序遍历,逐个比较即可找到最小差值进行中序遍历,当前节点和前一个......
  • 代码随想录day24
    77.组合解题步骤:  1、确定回溯函数参数及返回值;        vector<vector<int>> result;        vector<int> path;        void back......