5大数据结构

文章目录

  • 1. 栈结构
    • 例题1:字符串括号匹配
    • 例题2:最小栈
    • 例题3:逆波兰表达式求值
    • 例题4:下一个更大元素
  • 2. 队列结构
    • 题目1: 实现一个队列,包括入队和出队操作,并判断队列是否为空。
    • 题目2: 判断给定的字符串是否是回文字符串。
    • 题目3: 使用队列实现栈。
    • 题目4: 使用队列实现猫狗队列,可以按顺序存储猫和狗,并可以按顺序弹出猫和狗。
  • 2. 堆结构
    • 例题一:使用堆结构实现一个最小堆
    • 例题二:使用堆结构实现一个优先级队列
  • 4. 链表结构
    • 1. 反转链表
    • 2. 删除链表的倒数第N个节点
    • 3. 合并两个有序链表
    • 4. 判断链表是否有环
    • 5. 返回链表的中间节点
    • 6. 删除链表中的重复元素
  • 5. hash思想
    • 题目一:找出数组中重复的数字
    • 题目二:找出数组中只出现一次的数字
    • 题目三:找出字符串中第一个不重复的字符

1. 栈结构

例题1:字符串括号匹配

import java.util.Stack;public class BracketMatching {public static boolean isBracketMatching(String s) {Stack<Character> stack = new Stack<>();for (char c : s.toCharArray()) {if (c == '(' || c == '{' || c == '[') {stack.push(c);} else {if (stack.isEmpty()) {return false;}char top = stack.pop();if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {return false;}}}return stack.isEmpty();}public static void main(String[] args) {String s1 = "{[()]}"; // validString s2 = "{[(])}"; // invalidString s3 = "()[]{}"; // validSystem.out.println(isBracketMatching(s1)); // output: trueSystem.out.println(isBracketMatching(s2)); // output: falseSystem.out.println(isBracketMatching(s3)); // output: true}
}

例题2:最小栈

import java.util.Stack;public class MinStack {private Stack<Integer> stack;private Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack = new Stack<>();}public void push(int x) {stack.push(x);if (minStack.isEmpty() || x <= minStack.peek()) {minStack.push(x);}}public void pop() {if (stack.pop().equals(minStack.peek())) {minStack.pop();}}public int top() {return stack.peek();}public int getMin() {return minStack.peek();}public static void main(String[] args) {MinStack minStack = new MinStack();minStack.push(3);minStack.push(5);minStack.push(2);System.out.println(minStack.getMin()); // output: 2minStack.pop();System.out.println(minStack.top()); // output: 5System.out.println(minStack.getMin()); // output: 3}
}

例题3:逆波兰表达式求值

import java.util.Stack;public class EvaluateReversePolishNotation {public static int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for (String token : tokens) {if (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/")) {int b = stack.pop();int a = stack.pop();switch (token) {case "+":stack.push(a + b);break;case "-":stack.push(a - b);break;case "*":stack.push(a * b);break;case "/":stack.push(a / b);break;}} else {stack.push(Integer.parseInt(token));}}return stack.pop();}public static void main(String[] args) {String[] tokens1 = {"2", "1", "+", "3", "*"}; // (2 + 1) * 3 = 9String[] tokens2 = {"4", "13", "5", "/", "+"}; // 4 + (13 / 5) = 6System.out.println(evalRPN(tokens1)); // output: 9System.out.println(evalRPN(tokens2)); // output: 6}
}

例题4:下一个更大元素

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;public class NextGreaterElement {public static int[] nextGreaterElement(int[] nums) {int[] result = new int[nums.length];Arrays.fill(result, -1);Stack<Integer> stack = new Stack<>();Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {while (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {int index = stack.pop();result[index] = nums[i];}stack.push(i);}for (int i = 0; i < nums.length; i++) {while (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {int index = stack.pop();result[index] = nums[i];}}return result;}public static void main(String[] args) {int[] nums1 = {4, 2, 5, 7}; // output: [5, 5, 7, -1]int[] nums2 = {3, 1, 2, 4}; // output: [4, 2, 4, -1]int[] result1 = nextGreaterElement(nums1);int[] result2 = nextGreaterElement(nums2);System.out.println(Arrays.toString(result1));System.out.println(Arrays.toString(result2));}
}

2. 队列结构

题目1: 实现一个队列,包括入队和出队操作,并判断队列是否为空。

public class Queue {private int[] data; // 存储队列元素的数组private int front; // 队首指针private int rear; // 队尾指针public Queue(int size) {data = new int[size];front = 0;rear = -1;}public boolean isEmpty() {return rear == -1;}public void enqueue(int value) {data[++rear] = value;}public int dequeue() {int value = data[front++];if (front > rear) {front = 0;rear = -1;}return value;}
}

题目2: 判断给定的字符串是否是回文字符串。

import java.util.LinkedList;public class Palindrome {public static boolean isPalindrome(String str) {LinkedList<Character> queue = new LinkedList<>();// 将字符串的每个字符入队for (int i = 0; i < str.length(); i++) {queue.addLast(str.charAt(i));}// 依次出队和字符串的每个字符比较for (int i = 0; i < str.length(); i++) {if (queue.removeFirst() != str.charAt(i)) {return false;}}return true;}
}

题目3: 使用队列实现栈。

import java.util.LinkedList;public class Stack {private LinkedList<Integer> queue;public Stack() {queue = new LinkedList<>();}public void push(int value) {queue.addLast(value);}public int pop() {if (queue.isEmpty()) {throw new IllegalStateException("Stack is empty.");}// 将队列中除最后一个元素外的所有元素出队并入队,实现栈的后进先出特性int size = queue.size();for (int i = 0; i < size - 1; i++) {int value = queue.removeFirst();queue.addLast(value);}return queue.removeFirst();}public int top() {if (queue.isEmpty()) {throw new IllegalStateException("Stack is empty.");}return queue.getLast();}public boolean isEmpty() {return queue.isEmpty();}
}

题目4: 使用队列实现猫狗队列,可以按顺序存储猫和狗,并可以按顺序弹出猫和狗。

import java.util.LinkedList;public class AnimalQueue {private LinkedList<Animal> catQueue;private LinkedList<Animal> dogQueue;private int order;public AnimalQueue() {catQueue = new LinkedList<>();dogQueue = new LinkedList<>();order = 0;}public void enqueue(Animal animal) {animal.setOrder(order++);if (animal instanceof Cat) {catQueue.addLast(animal);} else if (animal instanceof Dog) {dogQueue.addLast(animal);}}public Animal dequeueAny() {if (catQueue.isEmpty() && dogQueue.isEmpty()) {throw new IllegalStateException("No animals in the queue.");} else if (catQueue.isEmpty()) {return dogQueue.removeFirst();} else if (dogQueue.isEmpty()) {return catQueue.removeFirst();} else {if (catQueue.getFirst().getOrder() < dogQueue.getFirst().getOrder()) {return catQueue.removeFirst();} else {return dogQueue.removeFirst();}}}public Cat dequeueCat() {if (catQueue.isEmpty()) {throw new IllegalStateException("No cats in the queue.");}return (Cat) catQueue.removeFirst();}public Dog dequeueDog() {if (dogQueue.isEmpty()) {throw new IllegalStateException("No dogs in the queue.");}return (Dog) dogQueue.removeFirst();}
}class Animal {private String name;private int order;public Animal(String name) {this.name = name;}public String getName() {return name;}public int getOrder() {return order;}public void setOrder(int order) {this.order = order;}
}class Cat extends Animal {public Cat(String name) {super(name);}
}class Dog extends Animal {public Dog(String name) {super(name);}
}

2. 堆结构

例题一:使用堆结构实现一个最小堆

import java.util.ArrayList;
import java.util.List;public class MinHeap {private List<Integer> heap;public MinHeap() {heap = new ArrayList<>();}// 获取父节点索引private int getParentIndex(int childIndex) {return (childIndex - 1) / 2;}// 获取左孩子节点索引private int getLeftChildIndex(int parentIndex) {return 2 * parentIndex + 1;}// 获取右孩子节点索引private int getRightChildIndex(int parentIndex) {return 2 * parentIndex + 2;}// 上浮操作,将新插入的元素与父节点比较,如果小于父节点就交换位置,直到满足最小堆的性质private void siftUp(int index) {while (index > 0) {int parentIndex = getParentIndex(index);if (heap.get(index) < heap.get(parentIndex)) {swap(index, parentIndex);index = parentIndex;} else {break;}}}// 下沉操作,将顶部元素与左右孩子节点中较小的比较,如果大于孩子节点就交换位置,直到满足最小堆的性质private void siftDown(int index) {int leftChildIndex = getLeftChildIndex(index);int rightChildIndex = getRightChildIndex(index);int smallestIndex = index;if (leftChildIndex < heap.size() && heap.get(leftChildIndex) < heap.get(smallestIndex)) {smallestIndex = leftChildIndex;}if (rightChildIndex < heap.size() && heap.get(rightChildIndex) < heap.get(smallestIndex)) {smallestIndex = rightChildIndex;}if (smallestIndex != index) {swap(index, smallestIndex);siftDown(smallestIndex);}}// 交换两个元素的位置private void swap(int index1, int index2) {int temp = heap.get(index1);heap.set(index1, heap.get(index2));heap.set(index2, temp);}// 插入元素public void insert(int value) {heap.add(value);siftUp(heap.size() - 1);}// 删除并返回堆顶元素public int deleteMin() {if (heap.isEmpty()) {throw new IllegalStateException("Heap is empty");}int minValue = heap.get(0);heap.set(0, heap.get(heap.size() - 1));heap.remove(heap.size() - 1);siftDown(0);return minValue;}// 获取堆的大小public int size() {return heap.size();}// 判断堆是否为空public boolean isEmpty() {return heap.isEmpty();}// 打印堆中的元素public void printHeap() {for (int i = 0; i < heap.size(); i++) {System.out.print(heap.get(i) + " ");}System.out.println();}
}

例题二:使用堆结构实现一个优先级队列

import java.util.PriorityQueue;public class PriorityQueueExample {public static void main(String[] args) {// 创建一个优先级队列PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();// 添加元素到优先级队列priorityQueue.offer(5);priorityQueue.offer(3);priorityQueue.offer(8);priorityQueue.offer(1);priorityQueue.offer(2);// 打印优先级队列中的元素System.out.println("Priority Queue: " + priorityQueue);// 获取并移除优先级队列中的最小元素int minElement = priorityQueue.poll();System.out.println("Minimum Element: " + minElement);// 打印优先级队列中的元素System.out.println("Priority Queue: " + priorityQueue);}
}

这是一个使用Java内置的PriorityQueue类实现的优先级队列示例。使用PriorityQueue的offer()方法可以添加元素到队列中,poll()方法可以获取并移除队列中的最小元素。

4. 链表结构

1. 反转链表

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class ReverseLinkedList {public ListNode reverseList(ListNode head) {ListNode prev = null; // 前驱节点ListNode curr = head; // 当前节点while (curr != null) {ListNode nextTemp = curr.next; // 保存当前节点的下一个节点curr.next = prev; // 当前节点的指针指向前驱节点prev = curr; // 前驱节点向后移动curr = nextTemp; // 当前节点向后移动}return prev; // 返回反转后的头节点}
}

2. 删除链表的倒数第N个节点

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class RemoveNthNodeFromEnd {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0); // 创建虚拟头节点dummy.next = head;ListNode first = dummy; // 快指针ListNode second = dummy; // 慢指针for (int i = 0; i <= n; i++) {first = first.next; // 快指针先向后移动n步}while (first != null) {first = first.next; // 快指针继续向后移动second = second.next; // 慢指针向后移动}second.next = second.next.next; // 删除倒数第N个节点return dummy.next; // 返回头节点}
}

3. 合并两个有序链表

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class MergeTwoSortedLists {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(0); // 创建虚拟头节点ListNode curr = dummy; // 当前节点while (l1 != null && l2 != null) {if (l1.val < l2.val) {curr.next = l1; // 将l1节点接到当前节点后面l1 = l1.next; // l1节点向后移动} else {curr.next = l2; // 将l2节点接到当前节点后面l2 = l2.next; // l2节点向后移动}curr = curr.next; // 当前节点向后移动}if (l1 != null) {curr.next = l1; // 将剩余的l1节点接到当前节点后面}if (l2 != null) {curr.next = l2; // 将剩余的l2节点接到当前节点后面}return dummy.next; // 返回合并后的头节点}
}

4. 判断链表是否有环

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class LinkedListCycle {public boolean hasCycle(ListNode head) {if (head == null || head.next == null) {return false; // 链表为空或只有一个节点,不可能有环}ListNode slow = head; // 慢指针ListNode fast = head.next; // 快指针while (slow != fast) {if (fast == null || fast.next == null) {return false; // 快指针走到链表尾部,不存在环}slow = slow.next; // 慢指针向后移动一步fast = fast.next.next; // 快指针向后移动两步}return true; // 快慢指针相遇,存在环}
}

5. 返回链表的中间节点

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class MiddleOfLinkedList {public ListNode middleNode(ListNode head) {ListNode slow = head; // 慢指针ListNode fast = head; // 快指针while (fast != null && fast.next != null) {slow = slow.next; // 慢指针移动一步fast = fast.next.next; // 快指针移动两步}return slow; // 返回中间节点}
}

6. 删除链表中的重复元素

class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}public class RemoveDuplicatesFromSortedList {public ListNode deleteDuplicates(ListNode head) {ListNode curr = head;while (curr != null && curr.next != null) {if (curr.val == curr.next.val) {curr.next = curr.next.next; // 删除重复节点} else {curr = curr.next; // 不重复,节点向后移动}}return head; // 返回头节点}
}

5. hash思想

题目一:找出数组中重复的数字

问题描述:给定一个整数数组,数组中有些数字是重复的,找出数组中任意一个重复的数字。

解决思路:使用哈希思想,可以借助集合(Set)来模拟哈希表,遍历数组,将数字放入集合中,如果集合中已经存在该数字,则找到了重复的数字。

import java.util.HashSet;public class DuplicateNumbers {public static int findDuplicate(int[] nums) {// 创建一个集合用于存储已经遍历过的数字HashSet<Integer> set = new HashSet<>();// 遍历数组,将数字放入集合中for (int num : nums) {// 如果集合中已经存在该数字,返回该数字if (set.contains(num)) {return num;}// 将数字放入集合中set.add(num);}// 如果没有找到重复的数字,则返回-1return -1;}public static void main(String[] args) {int[] nums = {2, 3, 1, 0, 2, 5, 3};int duplicate = findDuplicate(nums);System.out.println("Duplicate Number: " + duplicate);}
}

题目二:找出数组中只出现一次的数字

问题描述:给定一个整数数组,数组中有两个数字只出现了一次,其他数字都出现了两次,请找出这两个只出现一次的数字。

解决思路:使用哈希思想,可以借助集合(Set)来模拟哈希表,遍历数组,将数字放入集合中,如果集合中已经存在该数字,则从集合中移除该数字,最后集合中剩余的两个数字就是只出现一次的数字。

import java.util.HashSet;public class SingleNumbers {public static int[] findSingleNumbers(int[] nums) {// 创建一个集合用于存储只出现一次的数字HashSet<Integer> set = new HashSet<>();// 遍历数组,将数字放入集合中或从集合中移除for (int num : nums) {// 如果集合中已经存在该数字,将其从集合中移除if (set.contains(num)) {set.remove(num);} else {// 否则将数字放入集合中set.add(num);}}// 将集合中的数字转化为数组并返回int[] result = new int[2];int index = 0;for (int num : set) {result[index] = num;index++;}return result;}public static void main(String[] args) {int[] nums = {2, 3, 1, 0, 2, 5, 3};int[] singleNumbers = findSingleNumbers(nums);System.out.println("Single Numbers: " + singleNumbers[0] + ", " + singleNumbers[1]);}
}

题目三:找出字符串中第一个不重复的字符

问题描述:给定一个字符串,找出字符串中第一个不重复的字符,并返回其索引。

解决思路:使用哈希思想,可以借助数组来模拟哈希表,遍历字符串,统计每个字符出现的次数,然后再次遍历字符串,找到第一个出现次数为1的字符,返回其索引。

public class FirstUniqueCharacter {public static int firstUniqChar(String s) {// 创建一个长度为26的数组,用于统计每个字符出现的次数int[] count = new int[26];// 第一次遍历字符串,统计每个字符出现的次数for (char c : s.toCharArray()) {count[c - 'a']++;}// 第二次遍历字符串,找到第一个出现次数为1的字符,返回其索引for (int i = 0; i < s.length(); i++) {if (count[s.charAt(i) - 'a'] == 1) {return i;}}// 如果字符串中没有不重复的字符,则返回-1return -1;}public static void main(String[] args) {String s = "leetcode";int index = firstUniqChar(s);System.out.println("First Unique Character Index: " + index);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis 事务源码分析

先来看看在JAVA事务的相关技术&#xff0c;在JAVA中有两类事务&#xff0c;JDBC事务和JTA事务&#xff0c;如果是JDBC类型的事务&#xff0c;则是由Connection类来控制的。如果创建一个Connection对象时&#xff0c;没有显示调用 setTransactionIsolation(int level) 方法&…

Spring Cloud Stream实践

概述 不同中间件&#xff0c;有各自的使用方法&#xff0c;代码也不一样。 可以使用Spring Cloud Stream解耦&#xff0c;切换中间件时&#xff0c;不需要修改代码。实现方式为使用绑定层&#xff0c;绑定层对生产者和消费者提供统一的编码方式&#xff0c;需要连接不同的中间…

8、创建第一个鸿蒙页面并实现页面跳转

一、创建页面 1、新建页面 在项目的"pages"目录上右键&#xff0c;选择”新建“——”page" 2、录入页面的名称 在“Page name”中输入页面的名称&#xff0c;并点击“Finish”完成创建 3、以下为创建的新页面 2、注册页面 新建的页面会自动在“resources”…

一起Talk Android吧(第五百五十五回:Retrofit中的注解)

文章目录 1. 概念介绍2. 注解的分类与功能2.1 方法类注解2.2 参数类注解3. 内容总结各位看官们大家好,上一回中分享了一个Retrofit使用错误的案例,本章回中将 介绍Retrofit请求中的注解。闲话休提,言归正转,让我们一起Talk Android吧! 1. 概念介绍 我们在前面章回中介绍R…

二十、虚拟机网络配置

1、Linux网络配置原理 我自己Linux虚拟机的IP地址是&#xff1a;192.168.159.131 vmnet8&#xff1a;192.168.159.1 无线网卡&#xff1a;192.168.159.1 2、查看网络IP和网关 查看虚拟网络编辑器和修改IP地址 如果把这个位置的子网IP换成&#xff1a;192.168.8.0的话重启虚拟机…

MySQL进阶_9.事务基础知识

文章目录 第一节、数据库事务概述1.1、基本概念1.2、事务的ACID特性 第二节、如何使用事务 第一节、数据库事务概述 1.1、基本概念 事务 一组逻辑操作单元&#xff0c;使数据从一种状态变换到另一种状态。事务处理的原则 保证所有事务都作为 一个工作单元 来执行&#xff0c;…

【2023云栖】陈守元:阿里云开源大数据产品年度发布

本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;陈守元 | 阿里云计算平台事业部开源大数据产品总监 演讲主题&#xff1a;阿里云开源大数据产品年度发布 随着云计算的不断发展&#xff0c;未来数据处理和应用的趋势将围绕C…

CISP全真模拟测试题(一)

免责声明 文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 1、信息安全发展各阶段中,下面哪一项是通信安全阶段主要面…

python rb读取文件 base64加密 byte.decode解密,base64解密

Base64是一种二进制到文本的编码方式 import base64with open("D:\头像.jpg","rb") as fileobj:datafileobj.read()print("原数据格式")print(data)encode_database64.b64encode(data)print("Base64加密后的格式")print(encode_data)…

ES6中实现继承

本篇文章主要说明在ES6中如何实现继承&#xff0c;学过java的小伙伴&#xff0c;对class这个关键字应该不陌生&#xff0c;ES6中也提供了class这个关键字作为实现类的语法糖&#xff0c;咱们一起实现下ES6中的继承。 实现思路 首先直接通过class来声明一个Teacther类&#xff…

Ubuntu 16安装Python 3.10

操作系统为Ubuntu 16.04&#xff0c;默认的Python版本有2.7和3.5。由于不满足要求&#xff0c;需要更高版本的python。这里使用了Python3.10。其他操作系统或不同版本&#xff0c;请参考使用 先安装 OpenSSL 1.1.1 系统默认的是1.0.2.g&#xff0c;不满足要求&#xff08;可以…

TrafficGPT: Viewing, Processing, and Interacting with Traffic Foundation Models

这篇论文的标题是“TrafficGPT: Viewing, Processing, and Interacting with Traffic Foundation Models”&#xff0c;它探讨了将大型语言模型&#xff08;如ChatGPT&#xff09;与交通基础模型结合的潜力和应用。主要内容包括&#xff1a; 论文背景&#xff1a;论文指出&…

React整理总结(四)

1.过渡动画react-transition-group Transition 与平台无关&#xff0c;不一定使用css实现CSSTransition组件&#xff0c;in属性控制展示隐藏&#xff0c;添加className&#xff1b;有三个状态appear | enter | exit 第一类&#xff0c;开始状态&#xff1a;对于的类是-appear、…

SpringCloud微服务通信两种方式Feign和Dubbo:Feign基本使用、自定义配置、使用优化;Dubbo基本实现

RestTemplate存在的问题 代码可读性差&#xff0c;编程体验不统一参数复杂&#xff0c;URL难以维护 Feign远程调用 Feign简介 ​ Feign是SpringCloud提供的一个声明式的伪Http客户端&#xff0c;它使得调用远程服务就像调用本地服务一样简单&#xff0c;只需要创建一个接口…

Java code auditing

1) FindBugs Checkstyle PMD 2) OWASP ZAP Burp Suite (XSS漏洞) 3) SQL注入

大数据-之LibrA数据库系统告警处理(ALM-25000 LdapServer服务不可用)

告警解释 系统按30秒周期性检测LdapServer的服务状态&#xff0c;当检测到两个LdapServer服务均异常时产生该告警。 当检测到一个或两个LdapServer服务恢复时告警恢复。 告警属性 告警ID 告警级别 可自动清除 25000 致命 是 告警参数 参数名称 参数含义 ServiceNam…

Unity中Shader法线贴图(上)

文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样&#xff1f;&#xff08;蓝色&#xff09;三、法线贴图能使纹理采样时&#xff0c;进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中&am…

金融数字化是什么?如何进行金融数字化转型?

​金融数字化 金融数字化&#xff0c;简单来说&#xff0c;就是利用数字技术对金融服务进行升级和转型。这包括但不限于电子支付、移动银行、网上银行、智能投顾、数字货币等。这些创新不仅优化了金融服务体验&#xff0c;也提高了金融效率&#xff0c;使金融行业能够更好地服…

编程刷题网站以及实用型网站推荐

1、牛客网在线编程 牛客网在线编程https://www.nowcoder.com/exam/oj?page1&tab%E8%AF%AD%E6%B3%95%E7%AF%87&topicId220 2、力扣 力扣https://leetcode.cn/problemset/all/ 3、练码 练码https://www.lintcode.com/ 4、PTA | 程序设计类实验辅助教学平台 PTA | 程…

【赠书第6期】MATLAB科学计算从入门到精通

文章目录 前言 1 安装与配置 2 变量定义 3 数据处理 4 绘图 5 算法设计 6 程序调试 7 推荐图书 8 粉丝福利 前言 MATLAB 是一种高级的科学计算和数据可视化平台。它由 MathWorks 公司开发&#xff0c;是科学研究、数据分析和工程实践中非常常用的一种软件工具。本文将…