程序员笔试题及答案.docxVIP

  • 0
  • 0
  • 约6.61千字
  • 约 8页
  • 2026-03-14 发布于河北
  • 举报

程序员笔试题及答案

一、基础编程题(每题15分,共45分)

1.题目:两数之和(简单)

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。假设数组中只有一个正确答案,且同一个元素不能被重复使用。

示例:nums=[2,7,11,15],target=9→输出:[0,1]

要求:用两种方法实现,分析时间复杂度和空间复杂度。

答案:

方法一:暴力枚举法

java

publicint[]twoSum(int[]nums,inttarget){

intn=nums.length;

for(inti=0;in;i++){

for(intj=i+1;jn;j++){

if(nums[i]+nums[j]==target){

returnnewint[]{i,j};

}

}

}

//题目保证有答案,此处仅为编译通过

returnnewint[0];

}

复杂度分析:时间复杂度O(n2),两层循环遍历数组;空间复杂度O(1),未使用额外存储空间。

方法二:哈希表法(最优解)

java

publicint[]twoSum(int[]nums,inttarget){

MapInteger,Integermap=newHashMap();

for(inti=0;inums.length;i++){

intcomplement=target-nums[i];

if(map.containsKey(complement)){

returnnewint[]{map.get(complement),i};

}

map.put(nums[i],i);

}

returnnewint[0];

}

复杂度分析:时间复杂度O(n),仅遍历一次数组;空间复杂度O(n),哈希表最多存储n个元素。

2.题目:字符串反转(简单)

实现一个函数,将字符串中的每个单词反转,但保留单词的顺序不变。单词以空格分隔,假设字符串中无多余空格。

示例:输入:helloworld→输出:ollehdlrow

答案:

java

publicStringreverseWords(Strings){

//分割单词

String[]words=s.split();

StringBuilderresult=newStringBuilder();

for(inti=0;iwords.length;i++){

//反转单个单词

char[]chars=words[i].toCharArray();

intleft=0,right=chars.length-1;

while(leftright){

chartemp=chars[left];

chars[left]=chars[right];

chars[right]=temp;

left++;

right--;

}

result.append(newString(chars));

//添加空格(最后一个单词后不添加)

if(i!=words.length-1){

result.append();

}

}

returnresult.toString();

}

复杂度分析:时间复杂度O(n),n为字符串总长度;空间复杂度O(n),用于存储分割后的单词和结果。

3.题目:有效的括号(中等)

给定一个只包括(,),{,},[,]的字符串s,判断字符串是否有效。有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。

示例1:输入:()→输出:true;示例2:输入:([)]→输出:false

答案:

java

publicboolea

文档评论(0)

1亿VIP精品文档

相关文档