剑指offer42--约瑟夫环和位移
来源:互联网 发布:太瘦了知乎 编辑:程序博客网 时间:2024/06/14 00:10
一、题目
题目:0, 1, … , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。
二、思想
(1)对链表进行初始化
(2)移动 m-1 次就可以移动到下一个要删除的元素上了
(3)将该元素删除
三、程序
package 剑指offer;import java.util.LinkedList;import java.util.List;/*题目:0, 1, … , n-1 这n个数字排成一个圈圈, *从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。*/public class Test47 {// 从0--n-1排成一圈,依次剔除第m个数public static int lastNumber(int n, int m){List<Integer> list = new LinkedList<>(); for (int i = 0; i < n; i++) { list.add(i); } // 要删除元素的位置 int index = 0; while (list.size() > 1) { // 只要移动m-1次就可以移动到下一个要删除的元素上 for (int i = 1; i < m; i++) { index = (index + 1) % list.size(); } list.remove(index); } return list.get(0);}public static void main(String args[]){ System.out.println(lastNumber(5, 3)); // 最后余下3 System.out.println(lastNumber(5, 2)); // 最后余下2 }}
import java.util.List;/*题目:0, 1, … , n-1 这n个数字排成一个圈圈, *从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。*/public class Test47 {// 从0--n-1排成一圈,依次剔除第m个数public static int lastNumber(int n, int m){List<Integer> list = new LinkedList<>(); for (int i = 0; i < n; i++) { list.add(i); } // 要删除元素的位置 int index = 0; while (list.size() > 1) { // 只要移动m-1次就可以移动到下一个要删除的元素上 for (int i = 1; i < m; i++) { index = (index + 1) % list.size(); } list.remove(index); } return list.get(0);}//// 1--n的n个数循环遍历//// 使用数组的方式//public static int lastNumber2(int n, int m){////// 边界条件//if(n <= 0 || m <= 0){//return 0;//}////// 创建一个长度为n+1的数组//int num[] = new int[n + 1];////for(int i = 1; i <= n; i++){//num[i] = i;//}////// 执行n-1次,每次将其中一个数置为0//int flag = 0;//// 其中flag是指对应数组的下标//for(int j = 1; j < n; j++){//for(int k = 0; k < m; k++){////flag++;////if(num[flag] == 0){//flag++;//}////if(flag > n){//flag = 1;//}//}//num[flag] = 0;//}////// 找到最后不为0的那个数//for(int i = 1; i <= n; i++){//if(num[i] != 0){//return num[i];//}//}//return 0;//}//public static void main(String args[]){ System.out.println(lastNumber(5, 3)); // 最后余下3 System.out.println(lastNumber(5, 2)); // 最后余下2 // System.out.println(lastNumber2(5, 3)); // 最后余下3// System.out.println(lastNumber2(5, 2)); // 最后余下2}}
四、位的操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。
package 剑指offer;/*题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。*/public class Test48 {public static int myOperation(int number1, int number2){int sum = 0;int count = 0;do{// 将两个数进行异或sum = number1 ^ number2;// 将两个数位与,如果是两个1,那么就向前进一位count = (number1 & number2) << 1;number1 = sum;number2 = count;}while(number2 != 0);return number1;} public static void main(String[] args) { System.out.println(myOperation(1, 2) + " = " + (1 + 2)); System.out.println(myOperation(11, 22)+ " = " + (11 + 22)); }}
1 0
- 剑指offer42--约瑟夫环和位移
- 翻转字符串(剑指offer42)
- 剑指offer42-翻转单词顺序和字符串的左旋转
- 剑指offer42:翻转单词顺序
- 剑指offer42——翻转字符串vs左旋
- python中的左位移和右位移
- 位移运算 << 和 >>
- 约瑟夫环和衍生问题
- 剑指off-约瑟夫环
- [剑指offer]约瑟夫环
- 约瑟夫问题、约瑟夫环
- 位移
- 剑指offer42:翻转单词顺序 VS 左旋转字符串(更高效、简便的解法)
- 位移和时间的定律
- 颜色基本概念和颜色位移
- java位移运算符<<和>>
- 【剑指offer】约瑟夫环问题
- 剑指offer 45-约瑟夫环
- 帧动画的应用------自己在用的时候写了 估计一些刚入门的可能还不会用,就写出来留给大家使用
- MFC中子窗口调用父窗口指针教程
- Matlab 中 set(h, 'ButtonDownFcn',@buttonDownCallback)
- 操练
- Android设计相关的网站推荐
- 剑指offer42--约瑟夫环和位移
- mysql(2)
- Google 不想与甲骨文争了,要放弃 Java APIs
- 计算机视觉著名数据集CV Datasets
- Android 手机号验证,用户名验证的正则表达式
- Installing the GNU Readline library
- header("Location:login.php")
- struts 2 漏洞学习总结
- 模式设计--观察者模式