首页 > 其他分享 >优化代码,满足条件时,立即跳出循环

优化代码,满足条件时,立即跳出循环

时间:2023-07-05 22:22:32浏览次数:27  
标签:满足条件 arr1 temp 跳出 int 代码 length 循环 数组

在做数组作业的过程中,遇到了一个问题,题目是定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)。

如果创建其他数组的话,解题的方法当然就很简单了,创建一个新数组,奇数从前往后插入,偶数从后往前插入,核心部分代码如下

for(int i = 0, j = arr1.length - 1,count = 0; count < arr1.length; count++){
    if(arr1[count] % 2 != 0){
        arr2[i] = arr1[count];
        i++;
    } else {
        arr2[j] = arr1[count];
        j--;
    }
}

如果不创建新数组,只在原数组中修改次序,则稍微复杂一些,不过算法倒也不难想出,利用双重循环,外层循环计数变量为i,从前往后遍历数组arr,如果遇到偶数,则进入内层循环,遍历到数组最后一个元素终止;内层循环从后往前遍历数组,计数变量为j,遍历到i

=j处中止,如果遇到奇数,则交换arr[i]与arr[j]的值,代码如下

for (int i = 0; i < arr1.length; i++) {
    if(arr1[i]%2 == 0) {
        for (int j = arr1.length - 1; j > i; j--) {
            if (arr1[j] % 2 != 0){
                temp = arr1[i];
                arr1[i] = arr1[j];
                arr1[j] = temp;
            }
        }
    }
}

从功能方面来说,这段代码已经实现了题目要求的功能,但从优化的方面来说,这段代码仍有冗余的计算,如果外层循环还没遍历完成,但此时的数组已经满足题目要求,循环仍然会继续走到结束,不会停下来,加长了程序运行时间。如果能在数组满足要求时便终止,那么便可大大减少运算量。

当i=j时,代表i这个位置是偶数,但i后面的元素也都是偶数,此时数组便满足题目要求了,于是我首先在循环外定义变量j,以便让更改后的j变量能够进入外层循环中,然后在外层循环最末尾加了判断条件,满足i==j便break终止循环,代码如下

int temp = 0;
int j = 0;
for (int i = 0; i < arr1.length; i++) {
    if(arr1[i]%2 == 0) {
        for (j = arr1.length - 1; j > i; j--) {
            if (arr1[j] % 2 != 0){
                temp = arr1[i];
                arr1[i] = arr1[j];
                arr1[j] = temp;
            }
        }
        if (i == j)
                break;
    }
}

这段代码是有问题的,运行后的结果不满足题目要求,我思考了很久(新手,还没学idea的debug怎么用。。),终于找到了问题所在,内层循环的每一轮,都会跑到j=i的位置去,内层也有冗余的运算啊!所以解决办法是,内层循环交换元素后,直接break,这样便解决了刚才的问题

int temp = 0;
int j = 0;
for (int i = 0; i < arr1.length; i++) {
    if(arr1[i]%2 == 0) {
        for (j = arr1.length - 1; j > i; j--) {
            if (arr1[j] % 2 != 0){
                temp = arr1[i];
                arr1[i] = arr1[j];
                arr1[j] = temp;
                break;
            }
        }
        if(i == j)
            break;
    }
}

看似一个简单的问题,如果只是简单创建一个新数组了事,那当然非常简单了,但如果想节省这个数组的空间,在原数组中交换次序,就会复杂不少,如果想进一步节省时间,则有需要对代码进行优化,数组满足要求便及时break结束循环。学代码的过程中,还是要勤快点,对自己的要求高一些,模块化,优化,格式,都要注意,养成良好的习惯,省的以后脑袋浑浑噩噩,写出一大堆屎山代码,又慢又乱不说,还要被人家骂。。

终于是把这个问题研究透了,开心~

标签:满足条件,arr1,temp,跳出,int,代码,length,循环,数组
From: https://www.cnblogs.com/feng-579/p/17530347.html

相关文章

  • Websocket+SpringBoot实现简单在线聊天(包含前后端代码)
    1、样式展示登录界面(用户名自己取,密码是111,可在前端文件中改,因为做的比较简单,没有把用户做数据库相关的,所以直接在前端固定了密码是111)聊天界面2、代码展示前端<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatibl......
  • kettle 组件之java代码
    新建转换,搜索java,然后选中脚本中的java代码,拖动到右侧 双击拖动过来的java代码,依次点击CodeSnippits→Commonuse→main,然后在窗口右侧会出现一堆代码 跳到整段代码的最后,找到putRow(data.outputRowMeta,r);然后在这段代码的上方输入两行代码:Stringvar=get(Fields.I......
  • Mybatis-generator插件快速生成代码
    生成步骤:在pom.xml中添加插件<!--mybatisGenerator插件--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.0</version><depende......
  • php中执行redis的布隆过滤器的代码
    <?php//测试redis布隆过滤器$redis=newRedis();$redis->connect('127.0.0.1',6379);//创建一个容量是1千万,布隆过滤器://$redis->rawCommand('BF.RESERVE','nzc:redisbloom3','0.0001','10000000');//向布隆过滤器中添加元素:/......
  • 向AI请教能否用图片生成vue代码
    Canfigmageneratevuecodebasedonascreenshotcapturedfromanandroidapp?Wed,Jul5,2023,3:49pmavatarNo,FigmadoesnotnativelygenerateVuecodebasedonascreenshotcapturedfromanAndroidapp.Figmaisprimarilyadesignandprototyping......
  • 代码模板
    代码#defineLLlonglong#defineUNunsigned#include<bits/stdc++.h>usingnamespacestd;//--------------------////--------------------//intmain(){ return0;}快读inlineintrd(){ intret=0,f=1;charch=getchar(); while(ch<'0&#......
  • 线段树区间查改(懒标记+代码细节)
    就如同我上次写链式前向星一样,这次我又一次在模拟赛中打算混点分。经过我缜密的思考基于暴力的猜测,我认为带懒操作的线段树至少可以混70分!(大雾弥漫)。于是我兴冲冲的开始敲代码,然后……线段树就打挂了……比赛结束后我痛定思痛,决定要好好复习一下线段树,然后经过我一下午的折腾,......
  • 三行汉字说清高维前缀和,三行代码写出高维前缀和
    ——whk时突然发现高维前缀和就是暴力前缀和,震惊0922首先考虑二维空间里的前缀和,很明显就是横着对每一行做一遍,再竖着对每一列做一遍。三维空间也很简单,横着做一遍纵着做一遍竖着做一遍。推广到\(n\)维,枚举每一维依次做一遍就好,只不过状压了,代码:for(inti=0;i<n;i++)......
  • Spring Loaded代码热更新实践和原理分析
    1、引言开发者在编码效率和快速迭代中的痛点场景包括:修改代码后,需要频繁重启应用,导致开发效率低下;实时调试时,不能立即看到代码修改的结果;大型项目中,重启的时间成本较高。针对这些问题,本文将深入探讨如何利用SpringLoaded热更新技术提高开发效率,减少编译和重启时间。......
  • 代码随想录算法训练营第二十四天| 491.递增子序列 46.全排列 47.全排列 II
     491.递增子序列 此题的难点:1,前提需要保留原有顺序2,保证递增3,保证去重注意:去重一定要有set的同时保证有顺序代码:1voidfindSubsequences_trackBack(vector<int>&nums,intstartIndex,vector<int>&path,vector<vector<int>>&result)2{3if(path.size(......