zoukankan      html  css  js  c++  java
  • LeetCode1579题——圆圈中最后剩下的数字

    1、题目描述:
    0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
    例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

    2、示例:
    示例 1:
    输入: n = 5, m = 3
    输出: 3

    示例 2:
    输入: n = 10, m = 17
    输出: 2
     
    限制:
    1 <= n <= 10^5
    1 <= m <= 10^6

    3、解题思路
    (1)将0,...,n-1编号存入集合list中
    (2)从beginIndex(初始值为0)开始循环遍历list,找出第m个元素在list中的索引值index
    (3)删除第m个元素list.remove(index)
    (4)更新下一次遍历list的起始索引,并记录到beginIndex变量中
    (5)重复(2)、(3)、(4)步骤,直至list中只有一个元素

    4、代码实现

    import java.util.*;
    
    class Solution {
        public int lastRemaining(int n, int m) {
            if (n < 1 || m < 1) {
                return -1;
            }
            if (n == 1) {
                return 0;
            }
            // 存储原始编号
            ArrayList<Integer> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                list.add(i);
            }
            int beginIndex = 0;
            while(n > 1) {
                int size = list.size();
                 // 获取删除数字编号的索引
                int index = (m % size + beginIndex - 1) % size;
                index = index == -1 ? size -1 : index;
                list.remove(index);
                // 下一次开始编号的索引
                beginIndex = index == size - 1 ? 0 : index;
                --n;
            }
    
            return list.get(0);
        }
    }
    

    圆圈中最后剩下的数字

     

  • 相关阅读:
    C++多线程基础学习笔记(三)
    js 实现排序算法 -- 快速排序(Quick Sort)
    js 实现排序算法 -- 归并排序(Merge Sort)
    Typescript
    Typescript
    Typescript
    Typescript
    Typescript
    Typescript
    js 实现排序算法 -- 希尔排序(Shell Sort)
  • 原文地址:https://www.cnblogs.com/shujk/p/12596277.html
Copyright © 2011-2022 走看看