汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石圆柱,在一根圆柱上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根圆柱上。并且规定,在小圆盘上不能放大圆盘,在三根圆柱之间一次只能移动一个圆盘。
解题思路:
- 当圆盘数量为1时,直接挪动到目标底座上;
- 当圆盘数量为n(n>1)时,需要先将n-1个圆盘挪到除目标底座外的另一个底座上,将最下方的圆盘成功挪至目标底盘之后,再将剩余n-1个圆盘挪至目标底盘
- n:盘子个数.
pos(n)底座标号
public class Main {
public static void move(char pos1,char pos2) {
System.out.print(pos1+"->"+pos2+" ");
}
public static void hanota(int n,char pos1,char pos2,char pos3){
if(n == 1) {
move(pos1,pos3);//终止条件
return;
}else{
hanota(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanota(n-1,pos2,pos1,pos3);
}
}
public static void main(String[] args) {
hanota(64,'a','b','c');
System.out.println();
}
}
- 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
解题思路:使用for循环嵌套遍历数组,找到对应目标值时输出下标
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
实现:
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
for(int j = i+1 ; j < nums.length ;j++){
if(nums[i] + nums[j] == target){
return new int[]{i,j};//找到目标值输出下标
}
}
}
return null;//未找到目标值,返回null
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
- 数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
解题思路:
法1:循环嵌套逐个遍历计数,输出出现次数最多的数
法2:先将数组内数字按照大小顺序排序;建立 i , j 同时访问数组,
j = i + len / 2 ;此时如果 i = j 的值说明i和j中间的数字出现次数最多
示例 1:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:
输入:[3,2]
输出:-1
示例 3:
输入:[2,2,1,1,1,2,2]
输出:2
实现:
class Solution {
public int majorityElement(int[] nums) {
int len = nums.length;
Arrays.sort(nums);//数组排序
for(int i = 0;i <= len/2;i++) {
for(int j = i+len/2; j < len;j++) {
if(nums[i] == nums[j]) {
return nums[i];
}
}
}
return -1;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-majority-element-lcci