【笔记】算法OJ 杂记C++ Java 容器使用

很久不做算法题目了
马上春招了
才重新拿起来
虽然 CSDN
关于 PAT 的 博文 就写了 四五百篇
但是 一两个月不做题 真的
都忘干净了
而且 我主攻打 Java 技术栈
就尽量 一道 题目 用C++ 和 Java 都完成一份
C++ 的容器使用 都忘了
Java 的更是 不熟练
所以 开一篇 博文 记录一下 杂乱的笔记

笔记

头插节点

  • Java List 使用 add 添加可以直接 设置 位置
  • C++ 想要在 vector 头部加值 要 temp.insert(temp.begin(), t->val);

Java使用 queue

  • Queue queue = new LinkedList();

Java 和 C++ 队列出队 不同

  • Java 的 queue.poll(); 直接弹出 第一个值
  • C++ 的 queue 需要 front() 获取第一个值 然后 pop() 弹出

Java 容器 sort

使用 collectios 工具类
牛客网在线系统也要 引包
import java.util.*;
或者

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

传入自定义 Comparator 方法

Collections.sort(intervals,new Comparator<Interval>(){
     @Override
     public int compare(Interval o1, Interval o2) {
     return o1.start != o2.start ? o1.start - o2.start : o2.end - o1.end;//起点靠前 区间大的靠前 后面可以continue;
          }
            
});

String 和 int 的 转换

C++

C++11标准增加了全局函数std::to_string,

string转化为int
1、使用strtol(string to long)
strtol(s.c_str(),&end,16);
2、使用sscanf
sscanf(“17”,"%D",&i);

Java

1 如何将字串 String 转换成整数 int?

A. 有两个方法:

1). int i = Integer.parseInt([String]); 或

i = Integer.parseInt([String],[int radix]);

2). int i = Integer.valueOf(my_str).intValue();

注: 字串转成 Double, Float, Long 的方法大同小异.

2 如何将整数 int 转换成字串 String ?

A. 有叁种方法:

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = “” + i;

注: Double, Float, Long 转成字串的方法大同小异.

java 获取容器内元素 用 .get(下标)

strs.get(i);

Java 字符数组 用 string builder 可以toString 转 String

  StringBuilder sb = new StringBuilder();
        for(int i=n-1;i>=0;i--){
            sb.append(list.get(i));
        }
         
        String s = sb.toString();

字符串数字组合 进行排序

NC111 最大数

给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大
清奇的排序思路

java版
Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o1+o2).compareTo(o2+o1);
            }
        });
c++版本
//定义一个排序规则
    static bool cmp(string a,string b){
        return a + b > b + a;
    }

Java 有 stack 没有直接的 queue

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

java使用 queue
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
System.out.println("element="+queue.element()); //返回第一个元素 
System.out.println("peek="+queue.peek()); //返回第一个元素 
offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer()
返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似,
但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element()
抛出一个异常,而 peek() 返回 null。

Java使用 stack

Java Stack 类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。
在 vector 基础上增加了一些接口
1 boolean empty()
测试堆栈是否为空。
2 Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element)
把项压入堆栈顶部。
5 int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

 Stack<Integer> stint = new Stack<Integer>();
  Stack<Character> stchar = new Stack<Integer>();

不能用 int char 要用封装类 Integer Character

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码不停Ti

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值