【刷题笔记】第六天

文章目录

今天再练一道迭代搜索的题 + 力扣每日一题

Power Calculus

题目描述

给你一个整数n,可以乘或者除,可以使用中间结果,求最少运算多少次可以得到 x n x^n xn

分析

相当于求从整数1开始,可以加或者减,可以使用中间结果,最少运算多少次可以得到n

实现细节见代码

c 复制代码
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;

const int N = 1010; 
int n;
int ans[N]; // 保存中间结果,n最大为1000,每次运算加1,也就需要1000次,所以最多运算1000次,也就是说中间结果最多有1000个
int pos; // 标记当前运算的位置
int depth; // 最大深度

// dep:当前递归深度
bool dfs(int dep) {
	if (dep > depth) return false;
	if (ans[pos] << (depth - dep) < n) {
		// depth - dep是还剩的递归次数
        // 估价函数:用最快的倍增都不能到达n,退出
        // 最快的倍增:假设ans[pos] = m, 下一层递归2m,再下一层4m, 8m 。。。 ,以2的幂倍增
		return false;
	}
	if (ans[pos] == n) {
		return true;
	}
	pos++;
	for (int i = 0; i < pos; ++i) {
		// 讨论上一个中间结果与前面所有的中间结果相加
		ans[pos] = ans[pos - 1] + ans[i];
		if (dfs(dep + 1)) {
			// 继续下一层的递归
			return true;
		}
		// 讨论上一个中间结果与前面所有的中间结果相减
		ans[pos] = ans[pos - 1] - ans[i];
		if (dfs(dep + 1)) {
			return true;
		}
	}
	pos--; // 回溯
	return false;
}

int main() {
	while (scanf("%d", &n)) {
		if (n == 0) break;
		depth = 0;
		pos = 0;
		ans[pos] = 1;
		while (!dfs(0)) {
			depth++;
		}
		printf("%d\n", depth);
	}
	return 0;
}

706. 设计哈希映射

方法一:纯数组
java 复制代码
class MyHashMap {
    private static final int MAX_N = 1000001;
    int[] map;
    public MyHashMap() {
        map = new int[MAX_N];
        Arrays.fill(map, -1);
    }
    
    public void put(int key, int value) {
        map[key] = value;
    }
    
    public int get(int key) {
        return map[key];
    }
    
    public void remove(int key) {
        map[key] = -1;

    }
}

/**
 * Your MyHashMap object will be instantiated and called as such:
 * MyHashMap obj = new MyHashMap();
 * obj.put(key,value);
 * int param_2 = obj.get(key);
 * obj.remove(key);
 */
方法二:数组加链表
java 复制代码
class MyHashMap {

    static class Node {
        int key, value;
        Node next;
        Node(int key, int value) {
            this.key = key;
            this.value = value;
        }
    }
    public Node[] table = new Node[(int)Math.pow(2, 14)];
    public MyHashMap() {

    }

    public int getIndex(int key) {
        int hash = Integer.hashCode(key);
        hash = hash ^ (hash >>> 16);
        return hash & (table.length - 1);
    }
    
    public void put(int key, int value) {
        int index = getIndex(key);
        if (table[index] == null) {
            table[index] = new Node(key, value);
        } else {
            Node cur = table[index];
            Node pre = null;
            while (cur != null) {
                if (cur.key == key) {
                    cur.value = value;
                    return;
                }
                pre = cur;
                cur = cur.next;
            }
            Node node = new Node(key, value);
            pre.next = node;
        }
    }
    
    public int get(int key) {
        int index = getIndex(key);
        if (table[index] != null) {
            Node cur = table[index];
            while (cur != null) {
                if (cur.key == key) {
                    return cur.value;
                }
                cur = cur.next;
            }
        }
        return -1;
    }
    
    public void remove(int key) {
        int index = getIndex(key);
        if (table[index] != null) {
            Node pre = null;
            Node cur = table[index];
            while (cur != null) {
                if (cur.key == key) {
                    if (pre == null) {
                        table[index] = cur.next;
                    } else {
                        pre.next = cur.next;
                    }
                    return;
                }
                pre = cur;
                cur = cur.next;
            }
        }
    }
}
相关推荐
多打代码16 分钟前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
四谎真好看36 分钟前
Java 学习笔记(进阶篇2)
java·笔记·学习
j_xxx404_2 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺2 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
THMAIL2 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
野犬寒鸦2 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
墨染点香2 小时前
LeetCode 刷题【61. 旋转链表】
算法·leetcode·职场和发展
Suckerbin3 小时前
DarkHole: 2靶场渗透
笔记·安全·web安全·网络安全
一枝小雨3 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
一枝小雨3 小时前
【C++】Vector完全指南:动态数组高效使用
开发语言·c++·笔记·vector·学习笔记·std库