• 【补】20200330~20200412做题记录(力扣)


    写在前面的话: 补做题训练与题解。
    做题时间: 2020年3月30日~2020年4月12日
    记录: 总共道题,时间为min。
    最近更新时间: 20200424

    排序数组

    链接:https://leetcode-cn.com/problems/sort-an-array/
    类名:
    考察点: 数组、排序
    解题过程:力扣3月每日1题
    这道题的动机代码AC通过是其次,主要是说明排序这个考点。选择、冒泡、插入、快排、归并、堆、希尔、桶、计数与基数。

    圆圈中最后剩下的数字

    链接:
    https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/
    类名:
    考察点: 环、模拟
    解题过程:力扣3月每日1题
    题目的意思是用n个数字形成一个圆圈,数字范围为0到n-1,数字顺序放置,我自己理解起来费劲,可以这么理解,有n个椅子,形成一个圆圈,对椅子顺序编号为0到n-1,每个椅子编号后就不能更改。假设每轮移除开始时的椅子总数为total,我们从序号为x的椅子开始数椅子数,移除第m个椅子,序号表示该椅子在该轮中的顺序属于第几个且与编号无关,那么,每轮被移除的椅子序号为(开始椅子的序号x+ 移除椅子个数m-1)%此轮移除的椅子总数量total,总共需要移除n-1轮才能使得最终只剩下1个椅子。每一轮移除1个椅子,椅子总数total的初始值为n,每轮数的第一把椅子序号即x的初始值为0且x为上一轮被移除的椅子序号。程序模拟上述过程即可得到圆圈中最后剩下的数字。

            ArrayList<Integer> cir = new ArrayList();  
            //数字编号 
            for(int i=0;i<n;i++){
                cir.add(i);
            }     
            int begin = 0 ;
            int num = n;
            for(int i=0;i<=n-1;i++){
                if(num==1){//只剩一个数字
                    ret = cir.get(0);
                    break;
                }
                //移除元素的下标
                int removePos = (begin+m-1)%num;
                cir.remove(removePos);
                //移除元素后,新的计算开始值
                begin = removePos;
                num--;
            }    
    
  • 相关阅读:
    Vue cmd命令操作
    迭代器和生成器
    10-外键的变种 三种关系
    09-完整性约束
    08-数据类型(2)
    07-数据类型
    06-表的操作
    05-库的操作
    04-基本的mysql语句
    03-MySql安装和基本管理
  • 原文地址:https://www.cnblogs.com/ranh941/p/12598836.html
Copyright © 2020-2023  润新知