-
java两个数交换_java如何写2个数字交换
2021-02-28 17:56:13我猜测你想说的是,Java这种没有“指针”或者“引用”的语言,怎么写C++里面的swap函数:templatevoid swap(T& a, T& b) {T tmp(a);a = b;b = tmp;}Java里面的primitive type(boolean, double, float, int, ...我猜测你想说的是,Java这种没有“指针”或者“引用”的语言,怎么写C++里面的swap函数:template
void swap(T& a, T& b) {
T tmp(a);
a = b;
b = tmp;
}
Java里面的primitive type(boolean, double, float, int, byte, char, long, etc.)都是pass by value(事实上我个人比较喜欢认为Java只支持pass by value,只不过所有的Object都是pass by value of the reference,所以说你在函数里面修改Object型参数的引用不会影响caller和环境,因为Object reference也是copy的),所以如果你要交换primitive type的值,不能只用函数和传参,要用一个Wrapper Object。
以下是一个例子,没有任何意义,只是为了展示你可以这么做,但是……可以这么做不代表你应该这么做。public final class SwapExample {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
final Swap s = new Swap(a, b);
a = s.getA();
b = s.getB();
System.out.println("a: " + a + ", b: " + b);
}
static class Swap {
private final T a;
private final T b;
public Swap(T a, T b) {
this.a = b;
this.b = a;
}
public T getA() {
return a;
}
public T getB() {
return b;
}
}
}
-
利用位运算符交换数据
2019-07-09 17:34:19我们交换两个数字的时候一般这样写: void swap(int a,int b) { int c; c=a; a=b; b=c; } 如果不引入第三方变量 c 呢,该怎么写? C++代码如下: #include <iostream> using namespace std; int ...我们交换两个数字的时候一般这样写:
void swap(int a,int b) { int c; c=a; a=b; b=c; }
如果不引入第三方变量 c 呢,该怎么写?
C++代码如下:
#include <iostream> using namespace std; int main() { int a=1,b=2; a^=b; b^=a; a^=b; cout << "交换数据后"<<"a="<<a<<" b="<<b; return 0; }
-
数组中只出现1次的2个数
2021-02-02 09:24:21请写程序找出这两个只出现一次的数字 可以先考虑如果只有1个数字出现1次,其余都2次,怎么找: •对所有数字异或,由于异或满足结合律交换律,结果就是所要查找的数字 对于存在2个出现1次的数字: •所有数字异或结果...如题所示:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
可以先考虑如果只有1个数字出现1次,其余都2次,怎么找:思路
•对所有数字异或,由于异或满足结合律交换律,结果就是所要查找的数字
对于存在2个出现1次的数字:
•所有数字异或结果为这两个数字的异或值,如果能将数组分为2部分,每个数字属于其中一部分,则能求出这两个数字。可以找到这两个数字异或结果中第一个为1的位,根据该位将数组分成2个数组源代码如下:
class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int num1xornum2 = 0; int sz = data.size(); for(int i = 0;i < sz;i++) num1xornum2 ^= data[i]; int idx = 0; while(((num1xornum2 & 1) == 0) && (idx < 32)){ idx++; num1xornum2 = num1xornum2 >> 1; } *num1 = 0,*num2 = 0; for(int i = 0;i < sz;i++){ if(isBit(data[i],idx)) *num1 ^= data[i]; else *num2 ^= data[i]; } } bool isBit(int num,int idx){ while(idx){ num = num >> 1; idx--; } return (num & 1); } };
-
关于js写可视化排序中核心部分settimeout和闭包联合使用的问题
2017-03-20 05:06:38但是我想让它更好的可视化:循环的时候,如果遇到前一个大于后一个,两个div红色变灰色,等待1秒,这两个div交换,这两个div又变成红色,继续下一轮循环。 我仿照![图片说明]... -
1031. 两个非重叠子数组的最大和 1104. 二叉树寻路 1131.绝对值表达式的最大值 1186. 删除一次得到子数组最大和 1218. 最长定差子序列 1227. 飞机座位分配概率 1261. 在受污染的二叉树中查找元素 1262...
-
你必须知道的495个C语言问题
2015-10-16 14:14:283.15 我要检查一个数是不是在另外两个数之间,为什么if(abc)不行? 3.16 为什么如下的代码不对?inta=1000,b=1000;longintc=a*b; 3.17 为什么下面的代码总是给出0?doubledegC,degF;degC=5.0/9*(degF-32); 3.18 ... -
C语言 静态变量自增怎么会突然变成int下限值?
2016-10-17 10:29:27/*------------只出现在两个地方 1/2----------------*/ printf("####%d\n", hs_compare_times); } // 右孩子是否比i大 if (r [r] > a[largest]) largest = r; if (&a[r] == key_word_loc) { hs... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:183.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 40 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 40 3.17 为什么下面的代码总是给出0?double degC, degF; degC= ... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:093.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 40 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 40 3.17 为什么下面的代码总是给出0?double degC, degF; degC= ... -
你必须知道的495个C语言问题(中文高清版)
2013-03-20 13:28:283.15 我要检查一个数是不是在另外两个数之间,为什么if(abc)不行? 3.16 为什么如下的代码不对?inta=1000,b=1000;longintc=a*b; 3.17 为什么下面的代码总是给出0?doubledegC,degF;degC=5.0/9*(degF-32); ... -
[你必须知道的495个C语言问题]人民邮电出版社
2012-08-18 19:02:283.15 我要检查一个数是不是在另外两个数之间,为什么if(abc)不行? 3.16 为什么如下的代码不对?inta=1000,b=1000;longintc=a*b; 3.17 为什么下面的代码总是给出0?doubledegC,degF;degC=5.0/9*(degF-32); ... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:503.15 我要检查一个数是不是在另外两个数之间,为什么if(a )不行? 69 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 69 3.17 为什么下面的代码总是给出0?double degC, degF; degC= 5.0 / 9... -
你必须知道的495个C语言问题(PDF)
2009-09-15 10:25:473.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:543.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 3.17 为什么下面的代码总是给出0?double degC, degF; degC= 5.0 / 9 * ... -
面试容易被问到的算法题总结
2020-04-10 21:38:09已知一个节点,怎么在O(1)时间内将该节点从链表中删除(答了将它后面的节点的值赋给他,然后将它后面的节点删除) 手撕算法:怎么将一个二叉排序树转换成双链表 手撕算法:合并两个有序链表 手撕算法:写一个线程...算法类:
有那些排序算法?不同排序算法的稳定性和时间复杂度和空间复杂度
写一个排序
快速排序算法 、写代码:快排时间复杂度(平均、最坏)、快排的思想,什么情况下要用什么排序算法、稳定性如何
手写归并排序
讲一下堆排序的过程
了解桶排序吗?讲一下
还有什么排序算法,插入排序如何改进为 nlogn的时间复杂度,什么排序算法效率最高呢
二分查找
二分查找与二叉搜索树
哈夫曼树,以及哈夫曼编码
树的广度优先遍历
广度优先遍历一个图、写一下代码
一致性哈希算法、
hash表与二叉树的区别
红黑树、口胡建树过程
红黑树介绍,加入一个结点时,它应该是红的还是黑的
跳表和红黑树的区别
b+树介绍,使用场景
b树和b+树、B、B+树的区别
分治思想
算法拓展类:
写反转链表
node *reverse(node *head)//链表的逆置 { node *next; node *prev = NULL; while (head != NULL) { next = head->next; head->next = prev; prev = head; head = next; } return prev; }
合并两个有序链表
已知一个节点,怎么在O(1)时间内将该节点从链表中删除(答了将它后面的节点的值赋给他,然后将它后面的节点删除)
怎么将一个二叉排序树转换成双链表
判断单链表中是否有环
bool IsLoop(node *head, node **start)//判断链表是否存在环形链表,start为回环开始节点的地址 { node *p1 = head, *p2 = head; if (head == NULL || head->next == NULL)//head为NULL或者链表为空时返回false { return false; } do { p1 = p1->next;//p1走一步 p2 = p2->next->next;//p2走两步 } while (p2 && p2->next && p1 != p2); if (p1 == p2) { *start = p1;//p1为回环开始节点 return true; } else { return false; } }
单次遍历删除链表倒数第n个节点
public static LNode findLastkNode(LNode head,int k){ if (head==null||head.next==null) return head; //定义两个指针 LNode slow,fast; slow=fast=head.next; int i; //求出第fast指向的节点 for ( i = 0; i <k&&fast!=null ; i++) { fast=fast.next; } if (i<k){ return null; } while (fast!=null){ slow=slow.next; fast=fast.next; } return slow; }
复杂链表的复制
给你一个链表1->2->3->4…将链表变为奇数在前面,偶数在后面,并保持奇偶数有序
找到数组中出现次数大于一半的那个数字 、
一个有正有负的数组,求数组的最大子数组的和
给你两个有序数组,求这两个数组的交集
两个栈实现一个队列
public class TwoStackImplQueue { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); /* * 队列的数据压入过程 */ public void push(Integer element){ stack1.push(element); } /* * 队列的数据弹出过程 */ public Integer pop(){ if(stack2.size() <= 0){ //第二个栈为空 while(stack1.size() > 0){ //第一个栈不为空 stack2.push(stack1.pop()); //将其第一个栈的数据压入第二个栈中 } } if(stack2.isEmpty()){ try{ throw new Exception("queue is empty"); }catch(Exception e){ //e.printStackTrace(); } } Integer head = stack2.pop(); return head; } public static void main(String[] args) { TwoStackImplQueue sq = new TwoStackImplQueue(); sq.push(1); sq.push(3); sq.push(5); sq.push(4); sq.push(2); System.out.println(sq.pop()); System.out.println(sq.pop()); sq.push(7); System.out.println(sq.pop()); } }
两个队列实现栈、
public class TwoQueueImplStack { Queue<Integer> queue1 = new ArrayDeque<Integer>(); Queue<Integer> queue2 = new ArrayDeque<Integer>(); /* * 向栈中压入数据 */ public void push(Integer element){ //两个队列都为空时,优先考虑 queue1 if(queue1.isEmpty() && queue2.isEmpty()){ queue1.add(element); return; } //如果queue1为空,queue2有数据,直接放入queue2 if(queue1.isEmpty()){ queue2.add(element); return; } //如果queue2为空,queue1有数据,直接放入queue1中 if(queue2.isEmpty()){ queue1.add(element); return; } } /* * 从栈中弹出一个数据 */ public Integer pop(){ //如果两个栈都为空,则没有元素可以弹出,异常 if(queue1.isEmpty() && queue2.isEmpty()){ try{ throw new Exception("satck is empty!"); }catch(Exception e){ e.printStackTrace(); } } //如果queue1中没有元素,queue2中有元素,将其queue2中的元素依次放入queue1中,直到最后一个元素,弹出即可 if(queue1.isEmpty()){ while(queue2.size() > 1){ queue1.add(queue2.poll()); } return queue2.poll(); } //如果queue2中没有元素,queue1中有元素,将其queue1中的元素依次放入queue2中,直到最后一个元素,弹出即可 if(queue2.isEmpty()){ while(queue1.size() > 1){ queue2.add(queue1.poll()); } return queue1.poll(); } return (Integer)null; } public static void main(String[] args) { TwoQueueImplStack qs = new TwoQueueImplStack(); qs.push(2); qs.push(4); qs.push(7); qs.push(5); System.out.println(qs.pop()); System.out.println(qs.pop()); qs.push(1); System.out.println(qs.pop()); } }
给定整型数组,求最长递增子序列长度
最长子序列问题,找出最长连续序列长度,比如【8 5 4 1 2 3 7】子序列为12345,长度为5(使用set)
class Solution { public int lengthOfLIS(int[] nums) { if(nums.length == 0) return 0; int[] dp = new int[nums.length]; int res = 0; Arrays.fill(dp, 1); for(int i = 0; i < nums.length; i++) { for(int j = 0; j < i; j++) { if(nums[j] < nums[i]) dp[i] = Math.max(dp[i], dp[j] + 1); } res = Math.max(res, dp[i]); } return res; } }
class Solution { public int findLengthOfLCIS(int[] nums) { if(nums.length <= 1) return nums.length; int ans = 1; int count = 1; for(int i=0;i<nums.length-1;i++) { if(nums[i+1] > nums[i]) { count++; } else { count = 1; } ans = count > ans ? count : ans; } return ans; } }
将数组里面非0的元素移到前面,0元素移到后面(不改变相对位置)
字符串反转
最短子序列问题
找中位数、两个有序数组求中位数
如何在很大的数组中快速找出第K大的元素?(TOPK问题)
栈实现表达式计算
n层台阶,只能走一层或两层,有几种走法?(剑指offer原题)
一个二维矩阵,右边的数比左边的大,下边的数比上边的大,如何判断某个数是否在矩阵中?时间复杂度?(剑指offer原题)
二分查找找出有序数组第一次出现的位置
交换二叉树的父子结点
求根节点到叶子节点之间和为x的路径 输出路径, 求根节点到叶子节点之间和为x的路径 输出路径,
分层打印二叉树
遍历list找出下标奇数的值,如果是 LinkedList 应该怎么优化;
一个数组,只有一个数出现1次,其他都出现三次,求这个数:hash散列,求得没碰撞的数,o(n)
设计模式:
用过什么设计模式
观察者模式
手撕算法:写一个线程安全的单例模式 、手撕单例模式 、手撕单例模式
手写单例模式的饿汉式,要求线程安全的双检锁模式
工厂模式的作用
写一个死锁程序。
设计一个LRU,写一下代码、LRU算法理解与特定场景的改进
智力题
烧绳子的智力题 一根1h 求15分钟的
-
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:523.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 3.17 为什么下面的代码总是给出0?double degC, degF; degC= 5.0 / 9 * ... -
UESTC 1698 The Game
2013-08-20 20:55:00枚举每一个为‘.'的格子,从这个格子开始搜索能到达的数字格子,两个格子交换一下,判断连成几个,再交换回来,继续搜索下一个。。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<... -
常见排序算法复习(python版)
2020-08-20 23:42:13感觉是最常见和思想最简单的算法,主要思想是依次比较相邻的两个元素,只要前面的比后面的大就交换,这样一轮下来最大的元素就在最后了;再对前面的元素依次这样处理,就得到了排好序的序列。 改进方法: 设置一个... -
深入理解JSON
2021-02-01 11:25:10我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符串是...基于以上两个问题,我们再追本溯源问一下,JSON究竟是什么东西?为什么JSON就是易于数据交换?JSON和J -
【agc006_e】Rotate 3x3
2020-10-17 17:00:03首先我们推规律。发现无论怎么旋转都是旋转点左、右侧的两列交换后上下翻转,旋转点所在的列只有上下翻转。所以翻转前若xyz三个数在同一列...显然至少有两个,第一个用来交换列之间的顺序,另一个用来改变列的大小写。. -
csu - 1536: Bit String Reordering (模拟)
2015-06-29 20:51:00不知道为何怎么写都写不对. 这题可以模拟. 虽然题目保证一定可以从原串变成目标串,但是不一定可以变成两种目标串. 所以需要判断下.统计原串中0和1的个数,然后计算目标串中0可能的个数,1可能的个数. 计算交换次数... -
2020-08-11
2020-08-11 15:01:48百度开发测试工程师一面 ...(1)不使用第三个变量,交换两个变量的值 (2)定义一个链表并判断链表中是否有环 (3)输入一个正整数数组,把数组中所有整数拼接成一个数,打印拼接后的所有数字中的最大值。 ... -
1.3.5 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度 1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量? ...
-
初中学生手册评语精选.doc
2021-01-18 11:39:23你知道要怎么样写好初中学生手册评语吗?下面是小编为大家整理的20xx初中学生手册评语.供大家分享。初中学生手册评语【精选篇】 1. 喜欢你的文静稳重,爱劳动,讲礼貌;喜欢你的认真学习的态度,作业总是那么工整清秀... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29o 4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated_expression; * 5. 指针 o 5.1 我想声明一个指针并为它分配一些空间, 但却... -
C/C++笔试题(附答案,华为面试题系列)
2008-11-14 15:36:11),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。 服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连 接。该新产生的套接字使用send()和recv()写读数据,直至...
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
PowerBI重要外部工具详解
-
精通编译Makefile,Nina, 从底层uboot到Android
-
Spring Cloud微服务学习系列6 SpringCloud基础入门
-
绿色移动电子物理系统基于滑动窗口的特征提取和流量聚类
-
Theoretical Machine Learning solution 1
-
ELF视频教程
-
MySQL 高可用工具 heartbeat 实战部署详解
-
C语言零基础入门(详细讲解)
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
基于透射相位梯度超表面的宽带频率扫描欺骗表面等离子极化平面天线
-
使用vue搭建微信H5公众号项目
-
使用HTTP网络技术构建灵活的RationalClearCase系统
-
自动化测试Python3+Selenium3+Unittest
-
HTML5设计原理
-
Spring Cloud微服务学习系列6 分布式服务中需解决的问题与Eureka注册中心的使用
-
打开vivado的.xpr工程文件报错Cannot locate target loader
-
2021年 系统分析师 系列课
-
uniapp组件-uni-countdown倒计时