2022最新算法分析及手写代码面试解析

2022年最新优化算法---蛛母狼马蜂算法(论文创新点) 前言 凡是机械、电子、计算机这一块,搞科研的小伙伴应该都知道,一个好的算法往往是科研论文的主要创新点。每年都会有许多层出不穷的算法,算法的相互融合和吸收各自的优点已不再是新鲜事!那么今天我就向大家推荐一种算法思路,目前还没有研究人员想到,哪怕用不到,也非常值得你收藏借鉴! 文章目录前言1、智能优化算法:黑寡妇算法(蛛)1.1算法原理1.1.1 初始化种群1.1.2 蜘蛛运动1.1.3 信息素1.2 算法流程1.3 参考文献2、智能优化算法:灰狼优化算法(母狼)2.1 算法原理2.1.1 包围猎物2.1.2 阅读详情

算法分析及手写代码

626.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写出程序提出其中年月日。要求:

写出合格的身份证的正则表达式,

^(\d{15}|\d{17}[\dx])$

写程序提取身份证中的年月日

public class IdCard
{
    private String idCard;//私有变量
    public IdCard(){}//构造方法
   //构造方法
   public IdCard(String idCard){
       this.idCard=idCard;
     }

    public void setIdCard(String idCard)
    {
        this.idCard=idCard;
    }

    public String getIdCard()
    {
        return idCard;
    }

    //从身份证号码中截取生日
    public String getBirthday()
    {
      return this.getIdCard().substring(6, 14);
    }

    public static void main(String args[])
    {
        ShenFenZheng sfz = new ShenFenZheng("420154199908157841");
         //调用getBirthday()方法获取生日
        System.out.println("生日:" + sfz.getBirthday());
    }
}

627.对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符保证字符串中有重复的字符,字符串的长度小于等于500.

package com.bjsxt;
import java.util.ArrayList;
import java.util.List;
public class FirstRepeat {

public static void main(String[] args) {
System.out.println(findFirstRepeat("pmedmitjtckhxwhvpwemznhmhzhpueainchqrftkmbjlradhmjekcqzansyzkvqhwnrdgzdbzewdmxkzrscikdaugbvygntrifnolehdtrqjlasofuvzeijbmzehkxknmjekcxswqldknysfsxrqaqzp",152));
}
//返回:y
    public static char findFirstRepeat(String A, int n) {
     String[] str=A.split("");
     for(int x=0;x<n;x++){
      int index=0;
      int num=0;
      //对于每一个值,都需要从前开始遍历
      while(index<=x){
       if(str[index].equals(str[x])){
        num++;
       }
       index++;
      }
      //该值出现了两次,说明重复了
      if(num>1){
       char flag='x';
       flag=str[x].toCharArray()[0];
       return flag;
      }
     }
     //返回该值说明已经没有重复的
     return 'p';
    }
}

628.写一个完整函数,实现拷贝数组

public class test {

public static void main(String[] args) {
int [] arr1 = {10,20,30,40,50};
int [] arr2 = CopyArray(arr1);

System.out.println(Arrays.toString(arr2));
}

private static int[] CopyArray(int[] arr) {
int [] arr2 = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
arr2[i] = arr[i];
}
return null;
}
}

629.写一排序算法,输入10个数字,以逗号分开,可根据参数选择升序或者降序排序,须注明是何种排序算法。

package cn.bjsxt.demo;

import java.util.Scanner;

public class SortDemo {
/**
 * 给定的字符串使用,号分隔
 * @param strNumber
 * @return
 */
public static String [] split(String strNumber){
String [] strSplit=strNumber.split(",");
return strSplit;
}
/**
 * 将String类型的数组转换成int类型的数组
 * @param strSplit
 * @return
 */
public static int [] getInt(String [] strSplit){
int arr[]=new int[strSplit.length];
for (int i = 0; i < strSplit.length; i++) {
arr[i]=Integer.parseInt(strSplit[i]);
}
return arr;
}
/**
 * 冒泡排序
 * @param arr
 */
public static void sort(int [] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j]>arr[j+1]) {
change(arr,j,j+1);
}
}
}
}
/**
 * 两数交换的方法
 * @param arr 数组
 * @param x 数组中元素的下标
 * @param y 数组中元素的下标
 */
public static void change(int [] arr,int x,int y){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
/**
 * 测试类
 * @param args
 */
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个数字串,每个数字以逗号分隔");
String str=input.next();

//调用方法
String [] s=split(str);//使用逗号分隔
int [] arr=getInt(s);//调有获得整型数组的方法
sort(arr);//调用排序的方法
for (int i : arr) {
System.out.print(i+"\t");
}
}
}

630.判断字符串是否是这样的组成的,第一个字母,后面可以是字母、数字、下划线、总长度为5-20。

package cn.bjsxt.demo;

import java.util.Scanner;

public class StringDemo {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个字符串,第一个字符必须是字母:");
String str=input.next();
if (str.length()<5||str.length()>20) {
System.out.println("对不起,字符串的长度必须在5-20之间!");
}else{
char []ch=str.toCharArray();
if (Character.isLetter(ch[0])) {//判断第一个字符是否是字母
for (int i = 1; i < ch.length; i++) {
if (!Character.isLetterOrDigit(ch[i])&&ch[i]!='_') {
System.out.println("字符串不符合要求");
break;
}
}
}
}
}
}

631.已排好序的数组A,一般来说可用二分查找可以很快找到,现有一特殊数组A,它是循环递增的,如a[]={17, 19 ,20, 25, 1, 4, 7, 9},在这样的数组中找一元素,看看是否存在。请写出你的算法,必要时可写伪代码,并分析其空间,时间复杂度。

思路说明:循环递增数组有这么一个性质:以数组中间元素将循环递增数组划分为两部分,则一部分为一个严格递增数组,而另一部分为一个更小的循环递增数组。当中间元素大于首元素时,前半部分为严格递增数组,后半部分为循环递增数组;当中间元素小于首元素时,前半部分为循环递增数组;后半部分为严格递增数组。

记要检索的元素为e,数组的首元素为a[low],中间元素为a[mid],末尾元素为a[high]。则当e等于a[mid] 时,直接返回mid的值即可;当e不等于a[mid] 时:

  1. a[mid] > a[low],即数组前半部分为严格递增数组,后半部分为循环递增数组时,若key小于a[mid]并且不小于a[low]时,则key落在数组前半部分;否则,key落在数组后半部分。

  2. a[mid] < a[high],即数组前半部分为循环递增数组,后半部分为严格递增数组时,若key大于a[mid]并且不大于a[high]时,则key落在数组后半部分;否则,key落在数组前半部分。

这种方式的时间复杂度为:O(log(n)),空间复杂度为O(1)。

public class TestBinarySearch {
public static void main(String[] args) {
// 定义数组
int[] a = { 17, 19, 20, 21, 25, 1, 4, 7 };
// 调用改进后的二分查找法求索引
int pos = search(a, 7);
System.out.println("要查找的元素的索引为:" + pos);
}

/** 改进后的二分查找法:e为要查找的元素 */
public static int search(int[] a, int e) {
int low = 0;
int high = a.length - 1;
int mid = 0;
int pos = -1; // 返回-1,表示查找失败
// 如果low < high,说明循环查找结束,直接返回-1;否则循环查找
while (low <= high) {
// mid为中间值索引
mid = (low + high) / 2;
// 如果中间值刚好是e,则查找成功,终止查找,e的索引为mid
if (a[mid] == e) {
pos = mid;
break;
}
// 如果a[low] <= a[mid],说明原数组的前半部分是严格递增的,后半部分是一个更小的循环递增数组
if (a[low] <= a[mid]) {
// 如果要查找的元素e小于a[mid]并且不小于a[low]时,则说明e落在数组前半部分
if (a[low] <= e && e < a[mid]) {
high = mid - 1;
} else {// 否则的话,需要在数组的后半部分继续查找
low = mid + 1;
}
} else {// 否则,后半部分是严格递增的,前半部分是一个更小的循环递增数组
// 如果要查找的元素e大于a[mid]并且不大于a[high]时,则说明e落在数组后半部分
if (a[mid] < e && e <= a[high]) {
low = mid + 1;
} else {// 否则的话,需要在数组的前半部分继续查找
high = mid - 1;
}
}
}
return pos;
}
}

632.请编写一个完整的程序,实现如下功能:从键盘输入数字n,程序自动计算n!并输出。(注1:n!=123...n, 注2:请使用递归实现)*

思路说明:因为n! = (n-1)! * n,所以要求n!首先要求出(n-1)!,而(n-1)! = (n-1-1)! * (n-1),以此类推,直到n = 1为止。

import java.util.Scanner;
public class TestFactorial {
public static void main(String[] args) {
System.out.print("请输入一个整数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(n + "的阶乘是:" + factorial(n));
}
/**求阶乘的方法*/
public static int factorial(int n) {
if(n == 1){
return 1;
}
return factorial(n - 1) * n;
}
}

633.请用递归的方法计算斐波那契数列的同项F(n),已知F0=0,F1=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N).*

思路说明:斐波那契数列的排列是:0,1,1,2,3,5,8,13,21,34,55,89,144……,特别指出的是0不是第一项而是第0项;因为F(n)=F(n-1)+F(n-2),所以要求F(n)首先要求出F(n-1)和F(n-2),而F(n-1)=F(n-1-1)+F(n-1-2),以此类推,直到,F(2)=F(1)+F(0)为止,已知F(1) = 1,F(0) = 0。

import java.util.Scanner;
public class TestFibo {
public static void main(String[] args) {
System.out.print("请输要求斐波那契数列的第几项:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println("斐波那契数列的第"+ n + "是:" + fibo(n));
}
public static int fibo(int n) {
if(n == 0){
return 0;
} else if(n == 1){
return 1;
}
return fibo(n -1) + fibo(n - 2);
}
}

634.现在有整数数组{11,66,22,0,55,32},请任意选择一种排序算法,用Java程序实现

冒泡思路说明:
(1) 最开始将数组看做一个无序数列(个数是数组的长度)与一个有序数列(0个)的组合;
(2) 每一趟比较完后, 找到了无序数列的最大值, 将其放到有序数列中(有序数列个数+1);
(3) N个数, 比较N-1趟;
(4) 每一趟挨个进行比较:从数组的第一个元素开始, 到无序数列的最后一个为止;
(5) 如果前边一个大于后边一个, 那么交换位置;
(6) 每趟比较的次数与趟数有关;
(7) 根据每趟比较是否发生了交换判断数据是否已经有序,从而进行优化。

public class TestSort {
public static void main(String[] args) {
int[] arr = {11, 66, 22, 0, 55, 32};
// 调用排序方法
sort(arr);
// 输出排除后的数组
for (int num : arr) {
System.out.print(num + "\t");
}
}

public static void sort(int[] arr) {
// 定义标记
boolean flag = false;
int temp;
// 排序
// 外层循环控制的是比较的趟数
for (int i = 0; i < arr.length - 1; i++) {
// 每一趟比较之前初始化, 否则会保留上一堂比较的结果
flag = false;
// 内层循环控制的是每趟比较的次数
for (int j = 0; j < arr.length - 1 - i; j++) {
// 挨个进行比较: 从数组的第一个元素开始, 到无序数列的最后一个
if (arr[j] > arr[j + 1]) {
// 交换
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//如果发生交换,改变flag的值
flag = true;
}
}
if (!flag) {
break;
}
}
}
}

635.请根据注释,编码实现下面类的方法

// 这个类用于存取一组权限,每个权限用非负整数表示的.这组枳限存储在
// righiString属性中。如果权限N权限存在,rightString第N个字符为“1”,否则, 为空格。
class RightStore {
public String righString = "";

// 如果传入的权限right存在,该方法返回true.否期,为false.,
// right为传入的权限的整数值.
public boolean getRight(int right) {

return true;
}

// 该方法存储或消除传入的权限.如果value为true,存储传入的权限,
// 否则淸除该权限.
// right为传入的权限的整数值.
public void setRight(int right, boolean value) {
}
}

思路说明:我们首先要读懂这道题的意思:righString这个字符串是用来存储一系列权限的,并且权限的取值只有两种:有和没有;在righString中使用字符‘1’表示有权限,字符空格‘ ’表示没有权限。举个例子:如果righString的长度为3,第一位表示对订单系统是否有权限,第二位表示对人员管理系统是否有权限,第三位表示对库存系统是否有权限。而方法中的int right参数则表示的是字符串的第几位。

上边这些搞明白之后,方法的编写就简单多了。

public class RightStore {
public String righString = "";

public boolean getRight(int right) {
//先求得第right个字符
char ch = righString.charAt(right - 1);
//如果ch为'1',返回true,否则返回false
return ch == '1';
}

public void setRight(int right, boolean value) {
//如果value为true,存储传入的权限,否则消除权限(改为空格)
righString.replace(righString.charAt(right - 1), value ? '1' : ' ');
}
}

636.二分法查询(递归实现)

思路说明:假设在一个已经排好序的有序序列(N个元素,升序排列),首先让序列中的中间的元素与需要查找的关键字进行比较,如果相等,则查找成功,否则利用中间位置将序列分成两个子序列,如果待查找的关键字小于中间的元素,则在前一个子序列中同样的方法进一步查找,如果待查找的关键字大于中间的元素,则在后一个子序列中同样的方法进一步查找,重复以上过程一直到查找结束!

import java.util.Scanner;
public class TestBinarySearchRecursion {
public static void main(String[] args) {
int[] a = { 1, 3, 5, 7, 9, 11, 13 };
System.out.print("请输入要查找的元素:");
int e = new Scanner(System.in).nextInt();
int index = binarySearch(a, 0, a.length - 1, e);
System.out.println(index != -1 ? "元素索引为" + index : "没有该元素");
}

private static int binarySearch(int[] a, int low, int high, int e) {
int mid = 0;
if (low <= high) {
mid = (low + high) / 2;
if (a[mid] == e) {
return mid;
} else if (a[mid] > e) {
return binarySearch(a, low, mid - 1, e);
} else {
return binarySearch(a, mid + 1, high, e);
}
}
return -1;
}
}

637.编写一段Java程序,把一句英语中的每个单词中的字母次序倒转,单词次序保持不变,例入输入为“There is a dog.”,输出结果应该是“erehT si a god.”要求不使用Java的库函数,例如String类的split,reverse方法。

函数形如:

public static String reverseWords(String input) {
String str = "";

return str;
}

思路说明:将字符串转化成字符数组,然后根据数组中空格的位置判断每个单词所占的索引范围,根据得到的索引将数组中的每个单词逆序后拼接到新的字符串中。

public class TestStringReverse{
public static void main(String[] args) {
String input = "There is a dog";
System.out.println("逆转后的字符串为:" + reverseWords(input));
}
public static String reverseWords(String input) {
String str = "";
//将字符串转化成字符数组
char[] arr = input.toCharArray();
//index用来记录每个单词的起始索引
int index = 0;
//遍历字符数组,将空格前边的单词挨个拼接到str中
for (int i = 0; i < arr.length; i++) {
if(arr[i] == ' '){
//根据空格的位置将空格前边一个单词密续追加到str中
for(int j = i - 1; j >= index; j--){
str += arr[j];
}
//单词拼接完成后,拼接一个空格
str += ' ';
//让index指向下一个单词的起始位置
index = i + 1;
}
}
//将最后一个单词拼接上
for(int i = arr.length - 1; i >= index; i--){
str += arr[i];
}
return str;
}
}

638.手写9x9乘法表,冒泡排序

9x9乘法表:

class Demo {
    public static void main(String[] args) {
        for(int x = 0;x <= 9; x++) {
            for(int y = 1;y <= x; y++) {
                System.out.print(y+"*"+x+"="+x*y+"\t");
            }
            System.out.println();
        }
    }
}

冒泡排序:

public class BubbleSort{
     public static void main(String[] args){
         int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
         for (int i = 0; i < score.length -1; i++){//最多做n-1趟排序
             for(int j = 0 ;j < score.length - i - 1; j++){//对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
                 if(score[j] < score[j + 1]){ //把小的值交换到后面
                     int temp = score[j];
                     score[j] = score[j + 1];
                     score[j + 1] = temp;
                 }
             }
             System.out.print("第" + (i + 1) + "次排序结果:");
             for(int a = 0; a < score.length; a++){
                 System.out.print(score[a] + "\t");
             }
             System.out.println("");
         }
         System.out.print("最终排序结果:");
         for(int a = 0; a < score.length; a++){
             System.out.print(score[a] + "\t");
         }
}
}

639.题目: 给定一个整数数组,找到是否该数组包含任何重复数字。你的函数应该返回true只要有任何数字 在该数组中重复出现,否则返回false。

public class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> numSet = new HashSet<Integer>();
        for(int i=0;i<nums.length;i++){·
            if(numSet.contains(nums[i]))
                return true;
            else
                numSet.add(nums[i]);
        }
        return false;
    }
}

640.给定一个数组nums, 写一个函数来移动所有0元素到数组末尾,同时维持数组中非0元素的相对顺序不变。要求不能申请额外的内存空间,并且最小化操作次数。

public void moveZeroes(int[] nums) {
        int size = nums.length;
        int startIndex = 0;
// 0元素开始的位置
        int endIndex = 0;
// 0元素结束的位置
        int currentNum;
        int i= 0;
        // 第一步:找到第一个0元素开始的位置
        // 并将第一个0元素的游标赋值给startIndex&endIndex
        while(i < size){
            currentNum = nums[i];
            if (currentNum == 0) {
                startIndex = i;
                endIndex = i;
                break;
            }
            ++i;
        }
        // 如果当前数组中没有找到0元素,则推出
        if (nums[endIndex] != 0)
            return;

        // 将当前i的值加1;直接从刚才0元素位置的后一位置开始循环
        ++i;
        while (i < size) {
            currentNum = nums[i];
            if (currentNum == 0){//如果当前元素等于0,则将i值赋值给endIndex
                    endIndex = i;
            } else {
                // 如果不为0
                //则将当前元素赋值给nums[startIndex]
                // 并将当前位置的元素赋值为0
                // startIndex和endIndex都加1;
                nums[startIndex] = currentNum;
                nums[i] = 0;
                ++startIndex;
                ++endIndex;
            }
            ++i;
        }
    }

641.给定一颗二叉树,返回节点值得先序遍历,请使用迭代(非递归)方式实现。

public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
        if(root == null)
            return result;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.push(root);
        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();
            result.add(node.val);
            if(node.right != null)
                stack.push(node.right);
            if(node.left != null)
                stack.push(node.left);
        }
        return result;
    }
}

642.验证一棵树是否为有效的二叉搜索树BST

public class Solution {
    private static int lastVisit = Integer.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
    if(root == null) return true;
        boolean judgeLeft = isValidBST(root.left); // 先判断左子树

        if(root.data >= lastVisit && judgeLeft) { // 当前节点比上次访问的数值要大
            lastVisit = root.data;
        } else {
            return false;
        }
        boolean judgeRight = isValidBST(root.right); // 后判断右子树
        return judgeRight;
}
}

643.从一个链表中删除节点

题目: 写一个函数用于在一个单向链表中删除一个节点(⾮非尾节点),前提是仅仅能够访问要删除的那个节点。

比如给定链表1 -> 3 -> 5 -> 7 -> 9 -> 16,给定你值为3的那个节点, 调⽤用你的函数后,链表变为

1 -> 5 -> 7 -> 9 -> 16。

/**
Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
* }
*/
public class Solution {
public void deleteNode(ListNode node) {
if(node==null||node.next==null) {
System.out.println("节点不存在或者是尾节点");

}else{
node.val=node.next.val;
node.next=node.next.next;
}
}
}

644.二叉搜索树BST中第Kth小的元素 题目:给定⼀个BST,写一个函数kthSmallest来找到第kth小的元素

/**
Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
* }
*/
public class Solution2  {
public int kthSmallest(TreeNode root, int k) {
    Stack<TreeNode> store = new Stack<TreeNode>();
    if (root == null) {
        return -1;
    }
    store.push(root);
    while (root.left != null) {
        store.push(root.left);
        root = root.left;
    }
    while (!store.empty()) {
        TreeNode cur = store.pop();
        k--;
        if (k == 0) {
            return cur.val;
        }
        if (cur.right != null) {
            root = cur.right;// let cur.right be the current node
            store.push(root);
            while (root.left != null) {
                store.push(root.left);
                root = root.left;
            }
        }
    }
    return -1;
}
}

645.题目:给定含有n个整数的数组S,S中是否存在三个元素a,b,c使得a + b + c = 0? 找到所有这样的三元 组,并且结果集中不包含重复的三元组。

646.子集问题

647.迭代方法实现二叉树的先序遍历:题目: 给定一颗⼆叉树,返回节点值得先序遍历,请使用迭代(非递归)方式实现。

648.验证二叉搜索树BST:题目: 验证一棵树是否为有效的二叉搜索树BST比如,二叉树[2, 1, 3],返回true二叉树[1, 2, 3], 返回false

649.编辑距离题目: 给定两个单词word1和word2,找到最小的操作步骤使得word1转换成word2,每次操作算作一 步。你可以对单词进行以下三种操作:1)插入一个字符2)删除一个字符3)替换一个字符

650.买卖股票问题:题目: 你有一个数组,第i个元素表示第i天某个股票的价格,设计一个算法找到最大的利润,并且你只能最多完成两次交易。

651.[编程]任给n个整数和一个整数x。请计算n个整数中有多少对整数之和等于x。

652.[编程]请说明快速排序算法的设计思想和时间复杂度,并用高级语言写出对整数数组进行一趟快排的函数实现。

653.对于一段形如:1,-13,115×3的输入

654.有两个字符串:目标串S=“s1s2.......sn”,模式串T="t1t2.......tm"。若存在T的每个字符一次和S中的一个连续字符序列相等,则匹配成功,返回T中第一个字符在S中的位置。否则匹配不成功,返回0。写出你的算法,要求线性时间复杂度

655.如何生成一个0-100的随机整数?

656.请编写一段Java程序将两个有序数组合并成一个有序数组

657.在最佳情况下,以下哪个时间复杂度最高(D)

658.一个数组,元素为从0到m的整数,判断其中是否有重复元素,使用java语言编写一个方法

659.某二叉树的先序遍历是12453,中序遍历是42513,那么其后序遍历是(A)

660.设一颗二叉树中有3个叶子节点,有八个度为1的节点,则该二叉树中总的节点数为()

661.给出下面的二叉树先序、中序、后序遍历的序列?

662.你知道的排序算法都哪些?用Java写一个排序系统

663.写一个二分查找(折半搜索)的算法。

664.统计一篇英文文章单词个数。

665.输入年月日,计算该日期是这一年的第几天。

666.回文素数:所谓回文数就是顺着读和倒着读一样的数(例如:11,121,1991…),回文素数就是既是回文数又是素数(只能被1和自身整除的数)的数。编程找出11~9999之间的回文素数。

667.全排列:给出五个数字12345的所有排列。

668.对于一个有N个整数元素的一维数组,找出它的子数组(数组中下标连续的元素组成的数组)之和的最大值。

669.用递归实现字符串倒转

670.输入一个正整数,将其分解为素数的乘积。

671.一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法。

672.写一个算法判断一个英文单词的所有字母是否全都不同(不区分大小写)

673.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A= [1, 1, 2, 2, 3],处理之后的数组应当为A= [1, 2, 3]。

674.给一个数组,其中有一个重复元素占半数以上,找出这个元素。

675.编写一个方法求一个字符串的字节长度?

第二篇:就业实战

第三篇:热门专业学习之路

第四篇:就业之路

给大家推荐两本学习算法的必看书籍宝典,小编都有电子版可以分享,助你备战金九银十!

考研复试机试C++数据结构与算法模板大全 数据结构与算法是计算机科学的核心基础,其中线性表、树、图等基础数据结构在工程实践中广泛应用。通过STL等标准库实现的高效数据结构操作,能够显著提升代码执行效率。在考研机试等编程能力测试场景中,熟练掌握动态数组、链表、二叉搜索树等数据结构的工程实现尤为关键。本文提供的C++模板代码针对机试高频考点,包含动态数组的2倍扩容策略、链表的狸猫换太子删除法等23种数据结构实现,以及DFS的三种写法和背包问题的空间优化等18类算法模板,特别适合需要快速提升编程实战能力的考生。所有代码均通过边界测试验证,并附带时间复杂度 阅读详情

相关推荐

左程云老师亲自讲解:当前大厂笔试最高频的十道算法题

前言 最近不少小伙伴跟我交流刷题肿么刷,我给的建议就是先剑指offer和力扣hot100,在这些题中还有些重要程度和出现频率是非常非常高的,今天给大家分享当今出现频率最高的10道算法题,学到就是赚到。 0X01翻转链表 力扣206和剑指offer24原题,题意为: 给你单链表的头节点head,请你反转链表,并返回反转后的链表。 分析: 翻转链表,本意是不创建新的链表节点然后在原链表上实现翻转,但是这个图有点会误导人的思维,其实更好的理解你可以看下面这幅图: 具体实现上两个思路,..

wdjnb的博客 2346

面试手写算法题总结

1.Two Sum问题,给定一个数组 nums找到数组中两个数之和为给定值所有或者(找到即可)组合。暴力搜索效率很低,这里用类似双指针可以让时间复杂度达到O(N)def two_sum(nums, target): res = [] nums.sort() if len(nums) &lt; 2: return res elif nums[0] &g...

LLM666Coder的博客 1664

人工智能十大流行算法,通俗易懂讲明白

人工智能领域中就流传着10大算法,它们的原理浅显,很早就被发现、应用,甚至你在中学时就学过,在生活中也都极为常见。本文学堂君就为大家用最简单的语言来介绍目前最流行的10种人工智能的算法,让对人工智能感兴趣,或想要入门的同学,能有更为直观的了解。

欢迎朋友,我是一名十多年开发经验的新手,希望多多指教。 1820

六种最新智能优化算法(LSO、SWO、ZOA、EVO、KOA、GRO)求解23个基准测试函数(含参考文献及MATLAB代码)

文件夹内包含六种优化算法(LSO、SWO、ZOA、EVO、KOA、GRO)求解23个测试函数的完整MATLAB代码,包含使用说明及参考文献,点击main.m即可运行,运行的结果图将自动保存到Picture文件夹内。

IT猿手 9969

智能优化算法——蝙蝠算法(Python&Matlab实现)

目录 1 前言 2蝙蝠算法原理细讲 3详细步骤 4 Python实现 4.1 代码 4.2 结果 5 Matlab实现 5.1代码 5.2结果 5.3展望 1 前言 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法。该算法基于迭代优化,初始化为一组随机解,然后迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强局部搜索速度。该算法具有实现简单、参数少等特点。 该算法主要用于目标函数寻优,基于蝙蝠种群利用产...

weixin_46039719的博客 6793

surfer10与Arcgis10.3 完美生成等值线和等值面方法

surfer10 与Arcgis10.3生成等值线和等值面的步骤如下: 1.准备surfer用的Book1.dat文件,格式如下: "x" "y" "z" 116.471992 40.809975 232 116.335556 40.700542 1235 116.541626 40.713333 214 116.73349 40.798607 566 2.在surfer中,选择Gr

哈里·雪利博客 1万+

13种最新2023年智能算法进行PK,免费获取matlab代码

本期推出13种2023年智能算法进行PK,在CEC2005和CEC2022函数集进行测试。文末有代码获取方式。(昨天由于上传文件发生问题,今天重新推出)13种算法都是2023年提出的,分别为:淘金优化器(GRO),雪消融优化器(SAO),霜冰优化算法(RIME),减法优化器(SABO),切诺贝利灾难优化器(CDO),逻辑优化算法(ILA),小龙虾优化算法(COA),长城建造算法(GWCA),几何平...

淘个代码 3297

告别手动转换!用腾讯云轻量服务器+QMT插件,5分钟搞定聚宽策略实盘(附完整源码)

本文详细介绍如何利用腾讯云轻量服务器和QMT插件快速实现聚宽策略的自动化实盘部署。通过云端信号中转站解决协议转换、信号缓存等核心问题,5分钟完成服务器配置,并附完整源码实现零改造实盘方案,显著提升量化交易效率。

weixin_28707739的博客 659

2023年最新智能优化算法之——IBI逻辑优化算法(IBL),附MATLAB代码

2023年最新智能优化算法之——IBI逻辑优化算法(IBL),附MATLAB代码,CEC2005测试

淘个代码 4514

【Creator】cocoscreator 2.4 apk还原为工程 (1)

Cocos Creator 2.4 还原图片 meta文件

jokesuser的博客 2260

逆变器专题(9)-基于dq坐标系的逆变器解耦控制建模与实时仿真分析

本文深入探讨了基于dq坐标系的逆变器解耦控制建模与实时仿真分析。通过生动的比喻和详细的数学推导,阐述了如何通过坐标变换和前馈补偿实现d轴与q轴的独立控制,从而提升系统动态性能与稳定性。文章还介绍了在MATLAB/Simulink中搭建仿真模型、分析动态响应与稳定性的方法,并展望了硬件在环(HIL)实时仿真的高级验证手段,为新能源并网与电机驱动领域的工程师提供了宝贵的实践指南。

gold的博客 547

值得收藏!2023 年,你应该知道的所有机器学习算法~

【优快云 编者按】经过数十年的演进,人工智能走出了从推理,到知识,再到学习的发展路径。尤其近十年由深度学习开启神经网络的黄金新时代,机器学习成为解决人工智能面临诸多难题的重要途径。然而,这一涉及概率论、统计学、逼近论、凸分析、算法复杂度等理论的交叉学科让很多开发者犯难,尤其是纷繁复杂的各类算法。本文作者结合自身多年的工作经验和日常学习,汇编了一份2023年度的机器学习算法大全。希望在新的一年,这...

优快云资讯 8713

PCIe Gen4 Switch芯片PM40028调试踩坑实录:从boot引脚设置到串口无输出的诡异问题

本文记录了PCIe Gen4 Switch芯片PM40028的实战调试过程,重点剖析了从boot引脚配置错误导致串口无输出,到使用逻辑分析仪定位并解决启动问题的完整排障思路。文章深入探讨了芯片启动流程、硬件信号测量方法,并总结了高速硬件调试的核心经验与系统性排查清单,为工程师解决类似PCIe Gen4设备调试难题提供实用指南。

i8j9k0l1的博客 251

2025 年的一些前沿算法及发展趋势

2025年的一些前沿算法及发展趋势

weixin_1079718670的博客 5082

基于Qt C++开发一款国产化的福昕风格PDF编辑工具

QString text = QInputDialog::getText(this, "文本批注", "输入批注内容:", QLineEdit::Normal, "", &ok);QString savePath = QFileDialog::getSaveFileName(this, "保存加密PDF", "", "PDF文件 (*.pdf)");QAction* zoomInAct = new QAction(QIcon::fromTheme("zoom-in"), "放大", this);

寒寒豆豆软件公司的博客 236

人形机器人电源系统硬件开发:从原理图设计到PCB布局的完整流程

人形机器人是“移动的智能终端”,其电源系统如同“心脏+血管”:既要为大脑(主控)、肌肉(电机)、感官(传感器)提供稳定能量,又要在有限体积内应对高动态负载(如跳跃时电机瞬间大电流)。本文聚焦“硬件开发”维度,覆盖从需求分析到PCB制板的完整流程,适合硬件工程师、机器人爱好者快速掌握工程实战方法。

AI天才研究院 2175

2020-2022年最新的智能群优化算法

基于猎人猎物优化算法的函数寻优算法 [1] Naruei, I., Keynia, F., Sabbagh Molahosseini, A. Hunter-prey optimization: algorithm and applications[J]. Soft Computing, 2022, 26: 1279-1314. 2智能优化算法:野狗优化算法 [2] Hernán Peraza-Vázquez, Adrián F. Peña-Delgado, Gustavo Echavarría-C

Vertira的博客 2万+

大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!

在当今大数据时代,数据量的爆炸式增长对企业和技术提出了前所未有的挑战。如何高效地存储、处理和分析这些庞大的数据集,成为了亟待解决的问题。Hadoop作为一种分布式计算框架,应运而生,为大数据处理提供了有效的解决方案。Hadoop是一个由Apache软件基金会维护的开源项目,它基于Google的分布式文件系统(Google File System,GFS)和MapReduce计算模型设计。Hadoop的主要目标是处理大规模数据集,它可以在普通硬件集群上运行,从而降低了大数据处理的成本。

邓邓子的博客 8280

java面试手写算法,历经30天

解决高流量访问的方案有很多,直接的方式是提高单机缓存的性能和资源利用率,例如Twemcache,更多的是将多个缓存实例以集群的方式提供服务,利用资源优势提供更好的性能和更大的存储容量,以满足应用对缓存能力的需求。Memcached是高性能的分布式内存缓存服务器,一般用来缓存访问的热点数据,减轻数据库的负担。本章以一个典型的社交类应用为例,基于一个简化的领域模型和业务场景,叙述该应用在面临不断增加的业务吞吐量时,传统的基于数据库的方案将面临的性能风险,随后阐述如何利用缓存技术对这些典型的性能问题进行解决。

m0_60607971的博客 707

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

机器学习常见算法

1. 线性回归 线性回归可能是统计学和机器学习中最知名和最易理解的算法之一。 由于预测建模主要关注最小化模型的误差,或者以可解释性为代价来做出最准确的预测。 我们会从许多不同领域借用、重用和盗用算法,其中涉及一些统计学知识。 线性回归用一个等式表示,通过找到输入变量的特定权重(B),来描述输入变量(x)与输出变量(y)之间的线性关系。   Linear Regression 举例:...

weixin_39012047的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

常见面试手写算法

import java.time.chrono.JapaneseChronology; import java.util.Arrays; public class Main { public static int  binarySort(int[] number, int n) { int start = 0; int end = number.length - 1;

dainandainan1的博客 3248

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何应对面试中的手写算法

最近一段时间一直在准备实习生招聘,自己总结一个手写算法题的步骤。 (1)理清算法的思路,尽量通过联想以前的算法,画图法,举例子法等。 (2)input               写出算法的输入 (3)output              算法输出什么内容 (4)case test(算法的测试用例)              可以通过三个方面来写 1.特殊输入:比如输入的数是不是无

瓜子哥 2423

java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。 public class WordCounting { public static void main(String[] args) { try(FileReader fr = new FileReader(“a.txt”)) { int counter = 0; boolean state = false; int currentChar; while((currentChar= fr.read()) != -1) { if(currentChar== ’ ’ || cur

seeseeyoua的博客 545

最新高精度算法详解(2),2024年最新史上最通俗计算机网络分层详解

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新需要这份系统化资料的朋友,可以戳这里获取≤10000a ≤ 10000a≤10000A≤106A ≤ 10^6A≤106,a≤10000a ≤ 10000a≤10000实际上是把长数字的每一位存储到数组当中,并且是倒序存储。倒序存储的原因:在数组中,如果顺序

2301_79058506的博客 822

信息获取优化算法(IAO)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取

信息获取优化算法(Information Acquisition Optimizer, IAO)是一种新型的元启发式算法(智能优化算法),灵感来源于人类的信息获取行为,由三个不同的关键策略组成。算法清晰易懂,性能也不错,值得一试!该成果由Xiao Wu于2024年8月发表在SCI期刊《The Journal of Supercomputing》上!

QSJIQIXUEXI的博客 1815

【2023年算法比较】13种最新智能优化算法大比拼(Matlab代码实现)

if ~strcmp(number,'F16')&&~strcmp(number,'F9')&&~strcmp(number,'F11') %这里是因为这几个函数收敛太快,不适用于semilogy,直接plot。8. CDO(Colliding Bodies Optimization):基于物体碰撞行为的优化算法,模拟物体之间的碰撞和反弹来搜索最优解。3. WOA(Whale Optimization Algorithm):基于鲸鱼社会行为的优化算法,模拟鲸鱼的追逐和协作行为来搜索最优解。

weixin_61181717的博客 3351
上一篇: 2022最新String面试题及答案
下一篇: MySQL八股文,备战金九银十
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值